在WPF中更改ResizeGrip的颜色

3

我希望改变ResizeGrip的正方形颜色,但是我找不到正确的属性。

我尝试按照以下方式覆盖默认的ResizeGrip样式:

<Style TargetType="{x:Type ResizeGrip}">
    <Setter Property="Foreground" Value="{StaticResource WindowBackground}" />
</Style>

我想控件模板太复杂了,无法从TemplatedParent获取该属性。

那么,我应该重写ControlTemplate吗?通过代码来获取?还是有什么更简单的方法我错过了?

1个回答

6
如果我们查看默认模板,我们会发现这些属性不仅没有模板绑定,而且它们中有一个硬设定的“透明”。所以我们可以顺便处理一下; 编辑
<Style x:Key="blah" TargetType="{x:Type ResizeGrip}">
   <Setter Property="OverridesDefaultStyle" Value="True" />
   <Setter Property="Foreground" Value="Blue"/>
   <Setter Property="Background" Value="Transparent"/>
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type ResizeGrip}">
            <Border Background="{TemplateBinding Background}"
                    SnapsToDevicePixels="True"
                    Width="10"
                    Height="10">
                <Path Data="M7.677,7.5300003 L9.677,7.5300003 9.677,9.5300002 7.677,9.5300002 z M3.786,7.5300003 L5.7859998,7.5300003 5.7859998,9.5300002 3.786,9.5300002 z M0,7.5300003 L2,7.5300003 2,9.5300002 0,9.5300002 z M3.786,3.8280003 L5.7859998,3.8280003 5.7859998,5.8280003 3.786,5.8280003 z M7.677,3.7660003 L9.677,3.7660003 9.677,5.7659999 7.677,5.7659999 z M7.677,0 L9.677,0 9.677,2 7.677,2 z" Fill="{TemplateBinding Foreground}" Height="9.53" Stretch="Fill" VerticalAlignment="Top" Width="9.677"/>
             </Border>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
</Style>

现在,您可以将其打造成任何您想要的样子;
<ResizeGrip Foreground="Red" Style="{StaticResource blah}"/>

希望这可以帮到你,加油。

好的,看起来如果我改变 <Rectangle> 的 brush 属性,我就可以实现我的目标。我会尽快尝试一下。 - Chnossos
改变颜色可以实现,但握把的形状已经从三角形变成了正方形。有没有办法使用默认(本地)形状? - Chnossos
@Chnossos 等等,你是在制作 Windows Store 应用还是 WPF? - Chris W.
我上面发布的图片链接展示了我在不修改模板时看到的默认握把。使用你在回答中提供的模板,我得到了这个。看到区别了吗? - Chnossos
哈哈哈,说真的,你一直在谈论的是那个角落里的小点吗?这应该很容易解决,我认为只需像CanResizeWithGrip这样添加属性到ResizeMode就可以将adorner改变成那样,或者无论如何改变那些点都不难,伙计。 - Chris W.
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接