我正在为一些单选按钮构建自定义控件模板。按钮的图像:
在控件模板中,每个单选按钮都将有一个带有名称的文本块,其下还有一个文本块用于指示该按钮是否不可用。我希望“不可用”文本仅在按钮未启用时可见。单选按钮启用时,“不可用”文本块应折叠。
下面是按钮的简化视图.xaml:
<RadioButton Name="one"
IsEnabled="{Binding Low_isAvailable}"
Style="{StaticResource RadioButtonTheme}" />
<RadioButton Name="two"
IsEnabled="{Binding High_isAvailable}"
Style="{StaticResource RadioButtonTheme}" />
<RadioButton Name="three"
IsEnabled="{Binding Nato_isAvailable}"
Style="{StaticResource RadioButtonTheme}"/>
下面是我目前拥有的样式的简化版本(RadioButtonTheme.xaml):
<ResourceDictionary>
<Style BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type RadioButton}"
x:Key="RadioButtonTheme">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border CornerRadius="7">
<StackPanel VerticalAlignment="Center">
<TextBlock HorizontalAlignment="Center"
Text="{TemplateBinding Property=Name}"
Foreground="{TemplateBinding Property=Foreground}">
</TextBlock>
<TextBlock Name="UnavailableTextBlock"
HorizontalAlignment="Center"
Text="Unavailable"
FontSize="14"
FontStyle="Italic"
Foreground="{TemplateBinding Property=Foreground}">
</TextBlock>
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
所以我试着设置了一些东西:
1.我在view. xaml的单选按钮上设置了一个visiblitity属性。然后我将该可见性绑定到radiobuttontheme.xaml中的“UnavailableTextBlock”,并将模板的其余可见性设置为“Visible”。我以为我可以让模板除了一个元素之外保持可见。现在我认为这是不可能的。
1.我尝试将“UnavailableTextBlock”直接绑定到单选按钮的IsEnabled属性,并通过BoolToVisiblityConverter运行它。
<TextBlock Name="UnavailableTextBlock"
Visibility="{TemplateBinding Property=IsEnabled, Converter={StaticResource BoolToVisConverter}}">
然而,我似乎无法让我的转换器在ResourceDictionary中工作,程序将崩溃,并显示以下错误:“找不到名为'BoolToVisConverter'的资源。资源名称区分大小写”
自从我把这个转换器添加到我的app. xaml中后,我就可以在其他xaml文件中使用<Application.Resources>它了。我需要把我的资源字典链接到这个转换器吗?我该怎么做?<ResourceDictionary.Resources>似乎对我不起作用。
1.我尝试向“UnavailableTextBlock”添加一个数据触发器,如下所示:
<TextBlock Name="UnavailableTextBlock"....>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{TemplateBinding Property=IsEnabled}" Value="false">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
但是,我得到一个错误,说:“IsEnabled”成员无效,因为它没有限定的类型名称。“我猜它引用的是TextBlock的IsEnabled属性,而不是单选按钮的IsEnabled属性?虽然我不太确定。我仍在学习WPF。
提前感谢您的帮助!
1条答案
按热度按时间ia2d9nvy1#
如果我正确理解了您想要实现的内容,那么您需要使用控件模板触发器。