0

我有一个包含以下元素的窗口,我正在尝试访问其中包含的值,<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>
4

3 回答 3

1

文件中由 Visual Studio 生成的支持变量.xaml.cs仅在特定情况下生成。用户控件主体中的任何“命名”元素都将具有生成的支持变量。但是,不会生成模板中的命名元素。这是因为 Visual Studio 无法知道您的模板将如何使用。例如,您的模板可以被用于ItemsControl生成多个模板实例。在这种情况下应该生成什么.xaml.cs

你有两个选择:

  1. 使用绑定,让你的TextBlock.Text属性的状态绑定到一个视图模型,这样你就不必TextBlock直接访问元素。
  2. “走”可视化树以TextBlock在运行时定位您的位置。

对于(2),我建议使用Linq-to-VisualTree,您可以在其中找到TextBlock如下内容:

TextBlock block = layoutRoot.Descendants<TextBlock>()
                            .Cast<TextBlock>().Where(tb => tb.Name="armingValue")
                            .Single();
于 2012-04-11T10:50:07.280 回答
0

您不需要访问 TextBox 值,而是访问它的绑定值。所以考虑到你有XAML

 <TextBlock Name="armingValue" Text="{Binding Value}" HorizontalAlignment="Right"/>

你需要阅读一个Value

尽量避免直接在 中访问 UI 元素,因为有时(并非如此罕见的情况)如果不是不可能的话(我的意思是不是保证方式)找到它们WPF会变得非常棘手。访问他们背后的数据。

于 2012-04-11T10:42:39.347 回答
0

也许我没有明白这一点,但你为什么不创建一个到文本框的绑定并将其标记为两种方式?

<TextBlock Text="Enum Value: " HorizontalAlignment="Right" Text="{Binding Value, Mode=TwoWay}"/>
于 2012-04-11T10:44:56.437 回答