在模板[WPF]中使用样式时,请参阅父控件 [英] Refer to a parent control when using styles inside templates [WPF]
本文介绍了在模板[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屋!
查看全文