我想在按下Ctrl键的同时实现缩放功能。 但是当鼠标悬停在ScrollView上时,不会触发MouseWheel事件。
有什么办法吗?
ps:SilverLight 4.0
<UserControl x:Class="SilverlightApplication11.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
<Grid x:Name="LayoutRoot"
Background="White">
<ScrollViewer Background="Gray"
MouseWheel="ScrollViewer_MouseWheel"
x:Name="scrollViewer">
<Rectangle Width="200"
Height="2000"
MouseWheel="ScrollViewer_MouseWheel"
Fill="AliceBlue" />
</ScrollViewer>
</Grid>
private void ScrollViewer_MouseWheel(object sender, MouseWheelEventArgs e)
{
if (Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
{
zoom+=0.1;
e.Handled = true;
}
}
答案 0 :(得分:3)
没有使用风格,有一种更简单的方法。将ScrollViewer内容放在Border中,如:
<ScrollViewer>
<Border MouseWheel="ScrollViewer_MouseWheel" Background="#01b0b0b0"> <!-- almost transparent to intercept events -->
<!-- ... your content goes here ... -->
</Border>
</ScrollViewer>
答案 1 :(得分:2)
我也有这个问题。我通过在单击ScrollViewer时将键盘焦点设置在ScrollViewer上来修复它。
答案 2 :(得分:0)
您的代码适合我。 ScrollViewer从不引发事件,因为ScrollViewer.OnMouseWheel已将其标记为已处理,但内部Rectangle实际上首先获取事件。也许HasFlag()有错误?
答案 3 :(得分:0)
我找到了解决方法:
为ScrollViewer创建一个样式,并在ScrollContentPresenter之前添加一个Border,如下所示
<Border MouseWheel="ScrollViewer_MouseWheel"
Background="Transparent"/>
<ScrollContentPresenter x:Name="ScrollContentPresenter"
Cursor="{TemplateBinding Cursor}"
ContentTemplate="{TemplateBinding ContentTemplate}"
Margin="{TemplateBinding Padding}" />