如何访问文本块中的值
本文关键字:文本 何访问 访问 | 更新日期: 2023-09-27 18:30:48
我有一个包含以下元素的窗口,我正在尝试访问<TextBlock Name="armingValue"
中包含的值,但在我的 .xaml.cs 文件中似乎无法识别它。
我需要做什么才能访问该值?
<Window.Resources>
<DataTemplate DataType="{x:Type ArmingVM:ArmingItem}">
<CheckBox Margin="10,5" IsChecked="{Binding IsSet}" Content="{Binding Name}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type ArmingVM:ArmingBindingData}">
<DockPanel>
<ItemsControl ItemsSource="{Binding ArmingItems}" HorizontalAlignment="Left">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<TextBlock Text="Enum Value: " HorizontalAlignment="Right"/>
<TextBlock Name="armingValue" Text="{Binding Value}" HorizontalAlignment="Right"/>
</DockPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="193*" />
<ColumnDefinition Width="551*" />
</Grid.ColumnDefinitions>
<Button Content="Get Panel Options" Name="btnGetOptionsConfigruation" Margin="12,12,23,396" Click="btnGetOptionsConfigruation_Click"></Button>
<StackPanel Grid.Column="1" Height="325" HorizontalAlignment="Left" Margin="68,43,0,0" Name="stackPanel1" VerticalAlignment="Top" Width="438">
<ItemsControl Name="armingItemsControl" ItemsSource="{Binding}"/>
</StackPanel>
</Grid>
Visual Studio 在 .xaml.cs
文件中生成的支持变量仅针对特定情况生成。用户控件主体中的任何"命名"元素都将具有生成的支持变量。但是,不会生成模板中的命名元素。这是因为Visual Studio无法知道你的模板将如何使用。例如,ItemsControl
可以使用您的模板来生成多个模板实例。在这种情况下,应该在.xaml.cs
内生成什么?
您有两种选择:
- 使用绑定,以便将
TextBlock.Text
属性的状态绑定到视图模型,这样就不必直接访问TextBlock
元素。 - "遍历"可视化树以在运行时定位
TextBlock
。
对于(2),我建议使用Linq-to-VisualTree,您可以在其中找到TextBlock
,如下所示:
TextBlock block = layoutRoot.Descendants<TextBlock>()
.Cast<TextBlock>().Where(tb => tb.Name="armingValue")
.Single();
您不需要访问文本框值,而是访问其绑定值。所以考虑到你有XAML
<TextBlock Name="armingValue" Text="{Binding Value}" HorizontalAlignment="Right"/>
您需要阅读Value
始终避免直接在 WPF
中访问 UI 元素,因为有时(不是那么罕见的情况)如果不是不可行(我的意思是无法保证的方式),找到它们会变得非常棘手。访问它们背后的数据。
也许我不明白这一点,但为什么不创建一个绑定到文本框并将其标记为双向?
<TextBlock Text="Enum Value: " HorizontalAlignment="Right" Text="{Binding Value, Mode=TwoWay}"/>