【发布时间】:2015-10-14 02:51:13
【问题描述】:
我是 WPF 的新手,所以我对“绑定”之类的东西有点迷失。
我刚刚创建了一个自定义扩展器的 controlTemplate,这是我的代码:
<Style TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<Border Padding="{TemplateBinding Padding}">
<Grid SnapsToDevicePixels="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="6*"/>
</Grid.ColumnDefinitions>
<Border Grid.ColumnSpan="2" Name="bgHack" Background="#FFFFC000" />
<Image Grid.ColumnSpan="2" HorizontalAlignment="Center" Name="imageArrow" Source="Images/downRow.png" Stretch="None"/>
<Viewbox Grid.Column="0" Stretch="Uniform" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<!--HERE IS THE VALUE OF THE TEXT I WANT TO CHANGE IN EACH INSTANCE-->
<TextBlock Name="headerText" Foreground="White" FontFamily="/BundyPOS;component/Fonts/#HelveticaRounded" TextAlignment="Center" Margin="7">Artículos</TextBlock>
</Viewbox>
<ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Grid.Column="1" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="Left" Margin="4,0,0,0" RecognizesAccessKey="True" SnapsToDevicePixels="True" VerticalAlignment="Center"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True"><!--WHEN CLICK IS RELEASED-->
<Setter Property="Source" TargetName="imageArrow" Value="Images/upRow.png"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" TargetName="bgHack" Value="#3cb878"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我也可以像这样实例化这个 controlTemplate:
<Expander Name="articlesExpander" Template="{StaticResource ExpanderHeaderImage}">
<StackPanel>
<TextBox>This is a textbox</TextBox>
<Button>A button</Button>
</StackPanel>
</Expander>
如何更改位于 controlTemplate 的 TextBlock 的文本值?我的意思是,我要创建这个 controlTemplate 的几个实例,并且我需要更改每个实例中 TextBlock 的文本。
【问题讨论】:
-
ControlTemplate目标ToggleButton,第二个 XAML sn-p 不涉及。不明白你的意思。如果您的意思是要设置Expander的切换按钮的样式,那么这不是要走的路。您不能从外部设置样式,而是在Expander内部设置样式(通常需要复制的 Expander 模板)。 -
@King King 我没有放所有代码,因为它太多了,但是客户扩展器已经工作了,我只需要在第二个 XAML sn-p 中更改 TextBlock 的文本跨度>
-
不确定它有多少,但第二个 sn-p 看起来根本不涉及第一个。顺便说一句,您在 ControlTemplate 中对 TextBlock 的
Text进行了硬编码,因此我们无法在 XAML 中的其他地方更改它。即使在代码中,您也需要执行一些遍历可视化树来查找 TextBlock 并更改 Text。如果希望它是动态的,则需要松散地设置文本(例如对某些 Binding、DynamicResource 等) -
@FernandoSantiago 将 TextBlock 数据绑定到模板化父级可能会对您有所帮助。看看这个SO
标签: c# wpf data-binding binding