在模板[WPF]中使用样式时,请参阅父控件 [英] Refer to a parent control when using styles inside templates [WPF]

查看:84
本文介绍了在模板[WPF]中使用样式时,请参阅父控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我有这种WPF风格:



 <  样式    TargetType   =  RadioButton    x:名称  = 切换 >  
< Setter 属性 = 模板 >
< ; Setter.Value >
< ControlTemplate >
< 边框 BorderBrush = {TemplateBinding BorderBrush} BorderThickness = {TemplateBinding BorderThickness} >
< 网格 >
< 矩形 >
< Rectangle.Style >
< 样式 TargetType = 矩形 >
< Style.Triggers >
< 触发器 属性 = IsChecked = True >
< Setter 属性 = 填写 = {TemplateBinding Foreground} / >
< / Trigger >
< 触发器 属性 = IsChecked < span class =code-attribute> = False >
< Setter 属性 = 填写 = {TemplateBinding Background} / >
< / Trigger >
< / Style.Triggers >
< < span class =code-leadattribute> / Style >
< / Rectangle.Style >
< ; / Rectangle >
< ContentPresenter / >
< / Grid >
< / Border >
< / ControlTemplate >
< / Setter.Value >
< / Setter >
< / Style >





这些行:



 <  触发器   属性  =  IsChecked      = < span class =code-keyword> True >  
< Setter Property = 填写 = {TemplateBinding Foreground} / >
< / Trigger >
< 触发器 属性 = IsChecked = 错误 >
< Setter 属性 = 填写 = {TemplateBinding Background} / >
< / Trigger >



不起作用,因为它们嵌套在矩形而不是Radiobutton中。



如何触发参考RadioButton?



非常感谢!!



Jymmy097

解决方案

 <  样式    targettype   =  RadioButton    x:key   = 切换    xmlns:x   = #unknown >  
< setter 属性 = 保证金 value = 0,2 / >
< setter property = Templat e >
< setter.value >
< controltemplate targettype = RadioButton >
< border borderbrush = {TemplateBinding BorderBrush} borderthickness = {TemplateBinding BorderThickness} >
< grid >
< rectangle fill = {TemplateBinding Background} / >
< contentpresenter content = {TemplateBinding Content} / >
< / grid > ;
< / border >
< / controltemplate >
< / setter.value >
< / setter < span class =code-keyword>>
< style.triggers >
< trigger property = IsChecked value = True >
< setter property = 背景 value = {StaticResource radioChecked} / >
< / trigger
>
< trigger property = IsChecked value = 错误 >
< setter 属性 = 背景 value = {StaticResource radioUnchecked} / >
< / trigger >
< / style.triggers >
< / style >
< lineargradientbrush x:key = radioChecked startpoint = 0,0 endpoint = 0,1 xmlns:x = #unknown >
< gradientstop 颜色 = #EEEEEE offset = < span class =code-keyword> 1 / >
< gradientstop 颜色 = #999999 offset = 0 / >
< / lineargradientbrush >
< lineargradientbrush x:key = radioUnchecked startpoint = 0,0 endpoint = 0,1 xmlns:x = #unknown >
< gradientstop 颜色 = #EEEEEE offset = 0 / >
< span class =code-keyword>< gradientstop color = #999999 < span class =code-attribute> offset = 1 / > ;
< / lineargradientbrush >


Hi everybody,

I have this WPF style:

<Style TargetType="RadioButton" x:Name="Toggle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                    <Grid>
                        <Rectangle>
                            <Rectangle.Style>
                                <Style TargetType="Rectangle">
                                    <Style.Triggers>
                                        <Trigger Property="IsChecked" Value="True">
                                            <Setter Property="Fill" Value="{TemplateBinding Foreground}" />
                                        </Trigger>
                                        <Trigger Property="IsChecked" Value="False">
                                            <Setter Property="Fill" Value="{TemplateBinding Background}" />
                                        </Trigger>
                                    </Style.Triggers>
                                </Style>
                            </Rectangle.Style>
                        </Rectangle>
                        <ContentPresenter />
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>



Those lines:

<Trigger Property="IsChecked" Value="True">
                                                <Setter Property="Fill" Value="{TemplateBinding Foreground}" />
                                            </Trigger>
                                            <Trigger Property="IsChecked" Value="False">
                                                <Setter Property="Fill" Value="{TemplateBinding Background}" />
                                            </Trigger>


Do not work as they are nested in a Rectangle and not in the Radiobutton.

How can I make the trigger refer to the RadioButton?

Thanks a lot!!

Jymmy097

解决方案

<style targettype="RadioButton" x:key="Toggle" xmlns:x="#unknown">
        <setter property="Margin" value="0,2" />
        <setter property="Template">
            <setter.value>
                <controltemplate targettype="RadioButton">
                    <border borderbrush="{TemplateBinding BorderBrush}" borderthickness="{TemplateBinding BorderThickness}">
                        <grid>
                            <rectangle fill="{TemplateBinding Background}" />
                            <contentpresenter content="{TemplateBinding Content}" />
                        </grid>
                    </border>
                </controltemplate>
            </setter.value>
        </setter>
        <style.triggers>
            <trigger property="IsChecked" value="True">
                <setter property="Background" value="{StaticResource radioChecked}" />
            </trigger>
            <trigger property="IsChecked" value="False">
                <setter property="Background" value="{StaticResource radioUnchecked}" />
            </trigger>
        </style.triggers>
    </style>
    <lineargradientbrush x:key="radioChecked" startpoint="0,0" endpoint="0,1" xmlns:x="#unknown">
        <gradientstop color="#EEEEEE" offset="1" />
        <gradientstop color="#999999" offset="0" />
    </lineargradientbrush>
    <lineargradientbrush x:key="radioUnchecked" startpoint="0,0" endpoint="0,1" xmlns:x="#unknown">
        <gradientstop color="#EEEEEE" offset="0" />
        <gradientstop color="#999999" offset="1" />
    </lineargradientbrush>


这篇关于在模板[WPF]中使用样式时,请参阅父控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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