[GcSpreadGrid] GcSpreadGridコントロールを拡大したい

文書番号 : 85079     文書種別 : 使用方法     登録日 : 2020/04/09     最終更新日 : 2020/04/09
文書を印刷する
対象製品
SPREAD for WPF 3.0J
詳細
GcSpreadGridコントロールを拡大するには、LayoutTransformプロパティに拡大率を指定したScaleTransformオブジェクトを設定します。以下にいくつかの実装例をご紹介します。

例1:[Ctrl]キーを押しながらマウスをホイールしたときに拡大する

以下のサンプルコードでは、最小10%、最大400%の拡大率に設定しています。

XAMLコードでScalsTransformオブジェクトを追加します。

◎サンプルコード(XAML)
<sg:GcSpreadGrid x:Name="GcSpreadGrid1">
    <sg:GcSpreadGrid.LayoutTransform>
        <ScaleTransform CenterX="0" CenterY="0" x:Name="st"/>
    </sg:GcSpreadGrid.LayoutTransform>
</sg:GcSpreadGrid>

コードビハインドでPreviewMouseWheelイベントを実装します。

◎サンプルコード(VB)
Private Sub GcSpreadGrid1_PreviewMouseWheel(sender As Object, e As MouseWheelEventArgs) Handles GcSpreadGrid1.PreviewMouseWheel

    If (Keyboard.Modifiers And ModifierKeys.Control) > 0 Then
        Dim zoom As Double
        If e.Delta > 0 Then
            If st.ScaleX < 0.2 Then
                zoom = 0
            Else
                zoom = -0.1
            End If
        Else
            If st.ScaleX > 4 Then
                zoom = 0
            Else
                zoom = 0.1
            End If
        End If

        st.ScaleX += zoom
        st.ScaleY += zoom

    End If
End Sub

◎サンプルコード(C#)
private void gcSpreadGrid1_PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
{
    if ((Keyboard.Modifiers & ModifierKeys.Control) > 0)
    {
        double zoom;
        if (e.Delta < 0)
        {
            zoom = st.ScaleX < 0.2 ? 0 : -0.1;
        }
        else
        {
            zoom = st.ScaleX > 4 ? 0 : 0.1;
        }

        st.ScaleX += zoom;
        st.ScaleY += zoom;
    }
}

例2:スライダーコントロールを使用してGcSpreadGridコントロールを拡大する

◎サンプルコード(XAML)
<sg:GcSpreadGrid x:Name="GcSpreadGrid1">
    <sg:GcSpreadGrid.LayoutTransform>
        <ScaleTransform ScaleX="{Binding ElementName=slider, Path=Value}" ScaleY="{Binding ElementName=slider, Path=Value}"/>
    </sg:GcSpreadGrid.LayoutTransform>
</sg:GcSpreadGrid>

<Slider x:Name="slider" Minimum="1" Maximum="5" Value="1" Width="200"/>

例3:スクロールバーを拡大したくない場合

以下のサンプルコードは、例2のスライダーコントロールを使用する場合を前提にしています。

◎サンプルコード(VB)
' スクロールバーの拡大率を逆算するコンバーターを実装します。
Public Class ScaleConverter
    Implements IValueConverter

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert
        Console.WriteLine(value)
        Dim i As Double? = CType(value, Double?)
        If (Not (i) Is Nothing) Then
            value = (1 / i)
            Console.WriteLine(value)
        End If

        Return value
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
        Return value
    End Function

◎サンプルコード(C#)
// スクロールバーの拡大率を逆算するコンバーターを実装します。
public class ScaleConverter : System.Windows.Data.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Console.WriteLine(value);

        double? i = value as double?;
        if (i != null)
        {
            value = 1 / i;
            Console.WriteLine(value);
        }
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
}

◎サンプルコード(XAML)
<Window.Resources>
    <local:ScaleConverter x:Key="scaleConverter"/>
</Window.Resources>

<Grid>
    <sg:GcSpreadGrid x:Name="gcSpreadGrid1">
        <sg:GcSpreadGrid.LayoutTransform>
            <ScaleTransform ScaleX="{Binding ElementName=slider, Path=Value}" ScaleY="{Binding ElementName=slider, Path=Value}" x:Name="st"/>
        </sg:GcSpreadGrid.LayoutTransform>
        <sg:GcSpreadGrid.Resources>
            <Style TargetType="ScrollBar">
                <Setter Property="LayoutTransform">
                    <Setter.Value>
                        <ScaleTransform ScaleX="{Binding ElementName=slider, Path=Value, Converter={StaticResource scaleConverter}}" ScaleY="{Binding ElementName=slider, Path=Value,Converter={StaticResource  scaleConverter}}">
                        </ScaleTransform>
                    </Setter.Value>
                </Setter>
            </Style>
        </sg:GcSpreadGrid.Resources>
    </sg:GcSpreadGrid>

    <Slider x:Name="slider" Minimum="1" Maximum="5" Value="1" />
</Grid>

例4:フィルタウィンドウを拡大する

◎サンプルコード(XAML)
<sg:GcSpreadGrid x:Name="gcSpreadGrid1" PreviewMouseWheel="gcSpreadGrid1_PreviewMouseWheel">
    <sg:GcSpreadGrid.LayoutTransform>
        <ScaleTransform x:Name="st"/>
    </sg:GcSpreadGrid.LayoutTransform>
    <sg:GcSpreadGrid.Resources>
        <Style TargetType="sg:FilterContextMenu">
            <Setter Property="LayoutTransform">
                <Setter.Value>
                    <ScaleTransform ScaleX="{Binding Source={x:Reference st}, Path=ScaleX}" ScaleY="{Binding Source={x:Reference st}, Path=ScaleY}"/>
                </Setter.Value>
            </Setter>
        </Style>
    </sg:GcSpreadGrid.Resources>
</sg:GcSpreadGrid>