在WPF中使用触发器内部的控件属性 [英] Use control properties inside triggers in WPF

查看:386
本文介绍了在WPF中使用触发器内部的控件属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我试图为一个按钮制作一个转换器,以便给它一个任意的背景,并且基于那个画笔(实际上,它支持只有SolidColorBrushes,LinearGradientBrushes和RadialGradientBrushes)。



我用过这段代码:

 <  样式    TargetType   = 按钮 >  
< Setter 属性 = 模板 < span class =code-keyword>>
< Setter.Value >
< ControlTemplate TargetType = {x:Type Button} >
< 边框 x:名称 < span class =code-keyword> = border BorderBrush = {TemplateBinding BorderBrush} BorderThickness = {TemplateBinding BorderThickness} 已删除 = {TemplateBinding Background} SnapsToDevicePixels = true CornerRadius = 5 >
< ContentPresenter x:名称 = contentPresenter 可聚焦 = 错误 Horizo​​ntalAlignment = {TemplateBinding Horizo​​ntalContentAlignment} 保证金 = {TemplateBinding Padding} RecognizesAccessKey = True SnapsToDevicePixels = {TemplateBinding SnapsToDevicePixels} VerticalAlignment = {TemplateBinding VerticalContentAlignment} / >
< / Border >
< / ControlTemplate >
< / Setter.Value >
< / Setter >
< 样式.Triggers >
< 触发 属性 = IsMous eOver = True >
< Setter 属性 = 背景 = {Binding Path = Background,Converter = {StaticResource BTHC}} / >
< / Trigger >
< / Style.Triggers >
< / Style >



在样式定义中按钮。错误发生在触发器中,但我无法理解......我不知道为什么它不起作用而且根本不会以任何方式修改背景...



你能帮我解决这个问题吗?



非常感谢!



Lusvardi Gianmarco

解决方案

好的,我自己解决了这个问题:



 <   style     targettype   = 按钮 >  
< setter property = 模板 >
< setter.value >
< controltemplate targettype = {x:Type Button} >
< border x:name = border borderbrush = {TemplateBinding BorderBrush} borderthickness = {TemplateBinding BorderThickness} 背景 = {TemplateBinding Background} snapstodevicepixels = true cornerradius = 5 tag = {TemplateBinding Background} xmlns:x = #unknown >
< contentpresenter x:name = contentPresenter focusable = False horizo​​ntalalignment = {TemplateBinding Horizo​​ntalContentAlignment} margin = {TemplateBinding Padding} recognaccesskey = True snapstodevicepixels = {TemplateBinding SnapsToDevicePixels} verticalalignment = {TemplateBinding VerticalContentAlignment} / >
< / border >
< controltemplate.triggers >
< 触发器 property = IsMouseOver value = True >
< setter property = 背景 targetname = border value = {Binding ElementName = border,Path = Tag,Converter = {StaticResource BTHC}} / >
< / trigger >
< trigger property = IsPressed value = True >
< setter property = 背景 targetname = border value = {Binding ElementName = border,Path = Tag,Converter = {StaticResource BTPC } / >
< / trigger >
< 触发器 property = IsEnabled value = False >
< setter property = 背景 targetname = border value = {Binding ElementName = border,Path = Tag,Converter = {StaticResource BTDC}} / >
< / trigger >
< / controltemplate.triggers >
< / controltemplate >
< / setter.value >
< / setter >
< / style >


Hi everybody,

I tried to make a converter for a button in order to give it an arbitrary background and, based on that brush (actually, it supports only SolidColorBrushes, LinearGradientBrushes and RadialGradientBrushes).

I used this code:

<Style TargetType="Button">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" removed="{TemplateBinding Background}" SnapsToDevicePixels="true" CornerRadius="5">
                        <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="{Binding Path=Background, Converter={StaticResource BTHC}}" />
            </Trigger>
        </Style.Triggers>
    </Style>


inside the style definition of the button. The error is in the triggers, but I cannot understand it... I do not know why it does not work and simply does not modify the background in any way...

Could you please help me sorting out this problem?

Thanks a lot!

Lusvardi Gianmarco

解决方案

Ok, I've solved it by myself:

<style targettype="Button">
    <setter property="Template">
        <setter.value>
            <controltemplate targettype="{x:Type Button}">
                <border x:name="border" borderbrush="{TemplateBinding BorderBrush}" borderthickness="{TemplateBinding BorderThickness}" background="{TemplateBinding Background}" snapstodevicepixels="true" cornerradius="5" tag="{TemplateBinding Background}" xmlns:x="#unknown">
                    <contentpresenter x:name="contentPresenter" focusable="False" horizontalalignment="{TemplateBinding HorizontalContentAlignment}" margin="{TemplateBinding Padding}" recognizesaccesskey="True" snapstodevicepixels="{TemplateBinding SnapsToDevicePixels}" verticalalignment="{TemplateBinding VerticalContentAlignment}" />
                </border>
                <controltemplate.triggers>
                    <trigger property="IsMouseOver" value="True">
                        <setter property="Background" targetname="border" value="{Binding ElementName=border, Path=Tag, Converter={StaticResource BTHC}}" />
                    </trigger>
                    <trigger property="IsPressed" value="True">
                        <setter property="Background" targetname="border" value="{Binding ElementName=border, Path=Tag, Converter={StaticResource BTPC}}" />
                    </trigger>
                    <trigger property="IsEnabled" value="False">
                        <setter property="Background" targetname="border" value="{Binding ElementName=border, Path=Tag, Converter={StaticResource BTDC}}" />
                    </trigger>
                </controltemplate.triggers>
            </controltemplate>
        </setter.value>
    </setter>
</style>


这篇关于在WPF中使用触发器内部的控件属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆