xaml中的ResizeGrip样式忽略鼠标悬停触发器
本文关键字:鼠标 悬停 触发器 中的 ResizeGrip 样式 xaml | 更新日期: 2023-09-27 18:17:42
我目前正在使用下面的xaml样式调整窗口的大小,但它似乎忽略了ismouseover触发器。
<Style x:Key="{x:Type ResizeGrip}" TargetType="{x:Type ResizeGrip}">
<Setter Property="MinWidth" Value="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}"/>
<Setter Property="MinHeight" Value="{DynamicResource {x:Static SystemParameters.HorizontalScrollBarHeightKey}}"/>
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ResizeGrip}">
<Grid Name="GripGrid" SnapsToDevicePixels="True" Background="{TemplateBinding Background}">
<Path Name="GripPath" Fill="Silver" HorizontalAlignment="Right" Margin="0,0,2,2" VerticalAlignment="Bottom" Data="M 8,0 L 10,0 L 10,2 L 8,2 Z M 4,4 L 6,4 L 6,6 L 4,6 Z M 8,4 L 10,4 L 10,6 L 8,6 Z M 0,8 L 2,8 L 2,10 L 0,10 Z M 4,8 L 6,8 L 6,10 L 4,10 Z M 8,8 L 10,8 L 10,10 L 8,10 Z"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="GripPath" Property="Fill" Value="Red"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我只是想改变鼠标上移/下移时握把的颜色。有人能帮忙吗,或者至少给我指个正确的方向?
谢谢!
以防有人需要这样的东西,我张贴我所做的(虽然不是我所希望的)
我几乎放弃了设置ismouseover触发器来调整窗口的大小。我所做的就是在我的窗口上放置一个拇指控件,并设置一个自定义样式,像这样:
<Style x:Key="RzGripThumb" TargetType="{x:Type Thumb}">
<Setter Property="SnapsToDevicePixels" Value="true" />
<Setter Property="OverridesDefaultStyle" Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Grid Name="GripGrid" SnapsToDevicePixels="True" Background="Transparent">
<Path Name="GripPath" Fill="Gray" HorizontalAlignment="Right" Margin="0,0,2,2" VerticalAlignment="Bottom" Data="F1M9,0L11,0 11,2 9,2 9,0z M9,9L11,9 11,11 9,11 9,9z M9,3L11,3 11,5 9,5 9,3z M9,6L11,6 11,8 9,8 9,6z M0,9L2,9 2,11 0,11 0,9z M3,9L5,9 5,11 3,11 3,9z M3,6L5,6 5,8 3,8 3,6z M6,9L8,9 8,11 6,11 6,9z M6,3L8,3 8,5 6,5 6,3z M6,6L8,6 8,8 6,8 6,6z"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="GripPath" Property="Fill" Value="White"/>
</Trigger>
<Trigger Property="IsMouseCaptured" Value="true">
<Setter TargetName="GripPath" Property="Fill" Value="Lime"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
* ismouseover是在悬停时改变颜色,ismousecapture是在按下时改变颜色。
拇指控件应该右对齐&底部。
然后我为拇指添加了DragDelta事件处理程序,其中包含:
double xadjust = this.ActualWidth + e.HorizontalChange;
double yadjust = this.ActualHeight + e.VerticalChange;
if ((xadjust >= this.MinWidth) && (yadjust >= this.MinHeight))
{
this.Width = xadjust;
this.Height = yadjust;
}
从ResizeGrip
class页面:
ResizeGrip
被定义为Window
的可视树的一部分。
因此,您需要更改Window
的ControlTemplate
以使对ResizeGrip
的更改生效。将您的 Style
设置为Window ControlTemplate
中的ResizeGrip Style
的DynamicResource
。
下面的例子改编自MSDN的窗口样式和模板页面:
<Style x:Key="{x:Type Window}"
TargetType="{x:Type Window}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Window}">
<Grid>
<Grid.Background>
<SolidColorBrush Color="{DynamicResource WindowColor}"/>
</Grid.Background>
<AdornerDecorator>
<ContentPresenter />
</AdornerDecorator>
<ResizeGrip x:Name="WindowResizeGrip"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Visibility="Collapsed"
IsTabStop="false" />
Style="{DynamicResource YourStyle}"
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="ResizeMode"
Value="CanResizeWithGrip">
<Setter TargetName="WindowResizeGrip"
Property="Visibility"
Value="Visible" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
你可以使用StaticResource
,如果你不会对Style
做任何进一步的改变。