在我的Grid
上,我有TextBlock
和Button
。如果Button
不可见,我希望将我的TextBlock.HorizontalAlignment
设置为 Center
。如果Button
可见,我希望将我的TextBlock.HorizontalAlignment
设置为 Right
.这是我的代码:
<TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" >
<TextBlock.Triggers>
<DataTrigger Binding="{Binding ElementName=myButton, Path=IsVisible}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right" />
</DataTrigger>
</TextBlock.Triggers>
</TextBlock>
我收到错误:
"水平对齐"成员无效,因为它没有限定类型名称。
所以我尝试添加TextBlock.HorizontalAlignment
,如下所示:
<TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" >
<TextBlock.Triggers>
<DataTrigger Binding="{Binding ElementName=myButton, Path=IsVisible}" Value="True">
<Setter Property="TextBlock.HorizontalAlignment" Value="Right" />
</DataTrigger>
</TextBlock.Triggers>
</TextBlock>
我收到错误:
XamlParseException
我应该怎么做?
不要尝试使用TextBlock.Triggers
,而是与Style.Triggers
进行Style
。
<StackPanel>
<TextBlock Text="TextBlock Content" Margin="5">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=myButton,Path=IsVisible}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<Button x:Name="myButton" Content="Click Me!" Margin="5"/>
</StackPanel>
请注意文档,因为它提到,为什么这里需要样式触发器。
请注意,仅在元素上建立的触发器集合 支持事件触发器,而不是属性触发器(触发器)。如果您需要 属性触发器,您必须将它们放置在样式或模板中,并且 然后将该样式或模板直接分配给元素 通过 Style 属性,或间接通过隐式样式 参考。
尝试使用 Style 执行此操作
<TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" >
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=myButton, Path=IsVisible}" Value="True">
<Setter Property="HorizontalAlignment" Value="Right" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>