我有一个包含以下元素的窗口,我正在尝试访问<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>
答案 0 :(得分:1)
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();
答案 1 :(得分:0)
您无需访问TextBox值,但需要访问绑定值。
所以考虑到你有XAML
<TextBlock Name="armingValue" Text="{Binding Value}" HorizontalAlignment="Right"/>
您需要阅读Value
请始终尝试避免直接在WPF
中访问UI元素,因为有时(不是那么罕见的情况)如果不是不可能的话,它会变得真的难以找到它们(我的意思是不保证) 。访问支持它们的数据。
答案 2 :(得分:0)
也许我没有明白这一点,但为什么不创建一个绑定到文本框并将其标记为双向?
<TextBlock Text="Enum Value: " HorizontalAlignment="Right" Text="{Binding Value, Mode=TwoWay}"/>