我有一个<Style x:Key="ToggleButtonStyle" TargetType="ToggleButton">
,其中有一个TextBlock
。我希望ToggleButton
能够在引用样式时更改Text
的{{1}}属性。我怎么能这样做?
我的风格如下
TextBlock
我需要能够设置 <Style x:Key="ReturnToggleButton" TargetType="ToggleButton">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="#FF999999"/>
<Setter Property="Background" Value="#FFECECEB"/>
<Setter Property="Foreground" Value="#FF999999"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent">
<VisualStateManager.VisualStateGroups>
...
</VisualStateManager.VisualStateGroups>
<TextBlock x:Name="text1" TextWrapping="Wrap" Text="Open" Foreground="#FF35393D" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="10" FontFamily="Verdana"/>
<Border x:Name="border1" BorderBrush="#FF999999" BorderThickness="1" CornerRadius="1" Height="14" Width="36" Margin="6,0" Background="Transparent">
<TextBlock x:Name="text2 TextWrapping="Wrap" Text="9:30" Foreground="#FF999999" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="10" FontFamily="Verdana"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
和Text
的{{1}}属性
答案 0 :(得分:0)
这是我采取的方法。
创建一个名为“DualTextToggleButton”的新“Silverlight模板化控件”,并将基类从“Control”更改为“ToggleButton”。
添加两个名为“Text1”和“Text2”的DependencyProperties(您可能希望使用比我在这里选择更好的名称)。现在打开Themes / Generic.xaml文件,并将DualTextToggleButton
的默认样式替换为您当前使用的样式。像这样: -
<Style TargetType="local:DualTextToggleButton">
<Setter Property="Text1" Value="Open" />
<Setter Property="Text2" Value="9:30" />
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="BorderBrush" Value="#FF999999"/>
<Setter Property="Background" Value="#FFECECEB"/>
<Setter Property="Foreground" Value="#FF999999"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="3"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Background="Transparent">
<VisualStateManager.VisualStateGroups>
...
</VisualStateManager.VisualStateGroups>
<TextBlock x:Name="text1" TextWrapping="Wrap" Text="{TemplateBinding Text1}" Foreground="#FF35393D" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="10" FontFamily="Verdana"/>
<Border x:Name="border1" BorderBrush="#FF999999" BorderThickness="1" CornerRadius="1" Height="14" Width="36" Margin="6,0" Background="Transparent">
<TextBlock x:Name="text2 TextWrapping="Wrap" Text="{TemplateBinding Text2}" Foreground="#FF999999" HorizontalAlignment="Left" VerticalAlignment="Top" FontSize="10" FontFamily="Verdana"/>
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
请注意TemplateBinding
的使用以及Text1和Text2 setter的添加。您的模板可能会在适当的情况下使用更多TemplateBinding
用法,目前大多数setter都没有执行任何操作,因为ControlTemplate会忽略它们。
现在您可以在Xaml中创建此控件的实例,如下所示: -
<local:DualTextToggleButton Text1="Closed" Text2="17:00" />
或者您通过Style: -
执行此操作 <Style x:Key="SomeDualTextToggleButtonStyle">
<Setter Property="Text1" Value="Closed" />
<Setter Property="Text2" Value="17:00" />
</Style>
或者您可以使用DataBinding: -
<ListBox ItemsSource="{Binding ListOfModelItems}">
<ListBox.ItemStyle>
<DataTemplate>
<local:DualTextToggleButton Text1="{Binding State}" Text2="{Binding TimeOfDay}"
IsChecked="{Binding Enabled, Mode=TwoWay}" />
</DataTemplate>
</ListBox.ItemStyle>
</ListBox ItemsSource="{Binding ListOfModelItems}">