WPF:ScrollViewer 上的 ScrollBar 未激活

发布于 2024-10-31 07:38:21 字数 1686 浏览 7 评论 0原文

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;
}

为什么放大时滚动条没有激活?

WPF
Why the ScrollBar is not activated on ScrollViewer when I zoom in?

<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;
}

Why the ScrollBar is not activated when I zoom in?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

怂人 2024-11-07 07:38:21

画布不会根据其内容调整大小。您应该使用另一个面板。例如网格:

<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;
}

Canvas doesn't resize to its contents. You should use another panel. Grid for example:

<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>

also I think you need to mark event as handled to prevent vertical scroll:

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;
}
甜嗑 2024-11-07 07:38:21

您需要为其设置宽度和高度(它在自动模式下不起作用),

即:

尝试了一下,成功了,祝你好运!

you need to set Width and Height for it (it will not work in Auto)

i.e.:
<Canvas Width="250" Height="235">

tried on mind and it worked, good luck!

夏日落 2024-11-07 07:38:21

正如 Marat 所提到的,画布的大小不会随着内容的改变而改变。
但我们可以像这样强制它,将父窗口命名为例如“myWpfApplication4.MainWindow”并且:

<Canvas
  Height="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualHeight}"
  Width="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualWidth}">

As mentioned Marat, the Canvas does not change its size after its content.
But we can force it like this, naming the parent Window as by eg."myWpfApplication4.MainWindow" and:

<Canvas
  Height="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualHeight}"
  Width="{Binding ElementName=myWpfApplication4.MainWindow, Path=ActualWidth}">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文