Wpf 对TextBlock HorizontalAlignment属性使用DataTrigger
在我的Wpf 对TextBlock HorizontalAlignment属性使用DataTrigger,wpf,xaml,text,Wpf,Xaml,Text,在我的网格上有文本块和按钮。 如果按钮不可见,我希望我的文本块.水平对齐设置为居中。 如果按钮可见,我希望我的文本块.水平对齐设置为右侧。这是我的密码: <TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" > <TextBlock.Trigge
网格上
有文本块
和按钮
。
如果按钮
不可见,我希望我的文本块.水平对齐
设置为居中
。
如果按钮
可见,我希望我的文本块.水平对齐
设置为右侧
。这是我的密码:
<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>
我得到一个错误:
XamlParseException
我该怎么做 试着用风格来做到这一点
<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>
不要尝试使用
TextBlock.Triggers
,而是使用Style.Triggers
选择样式
<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>
注意,正如上面提到的,为什么这里需要样式触发器
请注意,仅在元素上建立的触发器集合
支持EventTrigger,而不是属性触发器(Trigger)。如果你需要
属性触发器时,必须将其放置在样式或模板中,然后
然后直接将该样式或模板指定给元素
通过样式属性,或间接通过隐式样式
参考资料
谢谢我的解决方案(没有风格)不起作用的原因是什么?第一个错误是什么意思?@Gabriel在答案中添加了这一方面。
<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>