1

WPF
ズームインすると、ScrollViewer で ScrollBar がアクティブにならないのはなぜですか?

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="356" Width="804">
    <Grid>
        <ScrollViewer
            PreviewMouseWheel="ScrollViewer_PreviewMouseWheel" 
            VerticalScrollBarVisibility="Visible"
            HorizontalScrollBarVisibility="Visible">
            <Canvas>
                <Canvas.LayoutTransform>
                    <TransformGroup>
                        <ScaleTransform x:Name="scaleTransform"/>
                    </TransformGroup>
                </Canvas.LayoutTransform>
                <TextBlock Canvas.Left="34" Canvas.Top="47" Name="textBlock1" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
                <TextBlock Canvas.Left="310" Canvas.Top="46" Name="textBlock4" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
                <TextBlock Canvas.Left="188" Canvas.Top="157" Name="textBlock11" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
            </Canvas>
        </ScrollViewer>
    </Grid>
</Window>

CS:

private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if (e.Delta > 0)
        scaleTransform.ScaleY =
            scaleTransform.ScaleX += 0.1;
    else
        scaleTransform.ScaleY =
            scaleTransform.ScaleX -= 0.1;
}

拡大しても ScrollBar がアクティブにならないのはなぜですか?

4

3 に答える 3

1

キャンバスはその内容に合わせてサイズ変更されません。別のパネルを使用する必要があります。グリッドの例:

<ScrollViewer
    PreviewMouseWheel="ScrollViewer_PreviewMouseWheel" 
    VerticalScrollBarVisibility="Visible"
    HorizontalScrollBarVisibility="Visible">
    <Grid>
        <Grid.LayoutTransform>
            <TransformGroup>
                <ScaleTransform x:Name="scaleTransform"/>
            </TransformGroup>
        </Grid.LayoutTransform>
        <TextBlock Margin="34,47" Name="textBlock1" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
        <TextBlock Margin="310,46" Name="textBlock4" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
        <TextBlock Margin="188,157" Name="textBlock11" Text="TK QSDFWPO Aàâéèêëîïôùûüÿçæœ; BLA BLA BLA...... " />
    </Grid>
</ScrollViewer>

また、垂直スクロールを防ぐために、イベントを処理済みとしてマークする必要があると思います。

private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
    if (e.Delta > 0)
        scaleTransform.ScaleY =
            scaleTransform.ScaleX += 0.1;
    else
        scaleTransform.ScaleY =
            scaleTransform.ScaleX -= 0.1;

    e.Handled = true;
}
于 2011-04-08T10:58:28.990 に答える
1

幅と高さを設定する必要があります(自動では機能しません)

すなわち: <Canvas Width="250" Height="235">

心に留めてみて、うまくいきました、頑張ってください!

于 2011-04-08T13:15:02.530 に答える
0

Marat が述べたように、Canvas はコンテンツの後でサイズを変更しません。しかし、親 Window の名前を「myWpfApplication4.MainWindow」などのように指定して、次のように強制することができます。

<Canvas
  Height="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualHeight}"
  Width="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualWidth}">
于 2011-04-08T13:12:40.827 に答える