xaml中的ResizeGrip样式忽略鼠标悬停触发器

时间:2014-08-13 08:42:05

标签: c# wpf xaml

我目前正在使用以下xaml来设置窗口的resizegrip样式,但它似乎忽略了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>

我只想在鼠标悬停/向下更改手柄的颜色。 任何人都可以帮助或至少指出我正确的方向?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果有人需要这样的东西,我会发布我所做的事情(虽然不是我所希望的)

我几乎放弃了为窗口调整大小的手柄设置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是在悬停时更改颜色,ismousecapured是在按下时更改它。

拇指控制器应对齐并且底部。

然后我为包含此内容的拇指添加了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;
}

答案 1 :(得分:0)

来自ResizeGrip Class页面:

  

ResizeGrip被定义为Window的可视树的一部分。

因此,您需要更改ControlTemplate的{​​{1}}以更改Window的工作。将您的 ResizeGrip设置为StyleDynamicResource的{​​{1}}。

以下是改编自MSDN上Window Styles and Templates页面的示例:

ResizeGrip Style

如果您不对Window ControlTemplate进行任何进一步更改,则可以使用<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>