【发布时间】:2019-07-16 14:45:48
【问题描述】:
我试图隐藏标签,直到用户在 texbox 中输入数字。然后我希望标签出现。我希望在不使用 C# 的情况下将这一切都包含在 XAML 中。
根据我在网上找到的内容,我尝试了不同类型的绑定。我想我一定很接近了,但还是有什么不对劲。
这是文本框代码:
<TreeViewItem Grid.Row="1" FontSize="12" Header="Width"/>
<TextBox Text="{Binding xcoord, UpdateSourceTrigger=PropertyChanged}" Name="x" Height="20" Width="40" Grid.Row="1" Grid.Column="2" />
这是标签代码:
<Label Foreground="SteelBlue" FontWeight="Bold" HorizontalAlignment="Center" VerticalContentAlignment="Center" Height="40" Background="Transparent" x:Name="label1" FontSize="16" Width="160" Content="{Binding Text, ElementName=x}" ContentStringFormat=" {0} mm" Canvas.Left="220" Canvas.Top="382" RenderTransformOrigin="1.045,-0.141" VerticalAlignment="Top">
<Label.Style>
<Style TargetType="Label">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text.Length, ElementName=x, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
基本上我尝试过的任何东西都不会在屏幕上显示标签。
【问题讨论】:
-
我认为您的错误是试图在 XAML 中完成所有操作。 ViewModel 是这种逻辑应该存在的地方(当它对表单的内容感到满意时,它会设置一个布尔字段,您的标签可以将其 Visible 属性绑定到该字段)。
-
DataTrigger 没有意义。您正在绑定到 Text.Length 并希望在值“True”时触发?您应该在视图模型中使用“IsLabelVisible”或其他内容创建一个属性,然后检查 TextBox 的支持属性是否为 Length >0。