【问题标题】:How to get access to template generated element wpf如何访问模板生成的元素 wpf
【发布时间】:2019-07-31 08:18:20
【问题描述】:

我想从我的 xaml.cs 文件中的以下代码(由模板生成的元素)访问名为 NameTextBox 的文本框。特别是我想获得 Text 属性。我想要这个属性,因为想在生成后识别组。

<DataGrid x:Name="PersonDataGrid">
            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Expander IsExpanded="False">
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <CheckBox x:Name="SelectGroupCheckBox" Checked="SelectGroupCheckBox_Checked"/>
                                                    <TextBlock x:Name="NameTextBox" Text="{Binding Name}"/>
                                                </StackPanel>
                                            </Expander.Header>
                                            <Expander.Content>
                                                <ItemsPresenter/>
                                            </Expander.Content>
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>

或者,如果你们有其他想法如何识别特定生成的组。 After generation it looks like this。 我想要它,因为如果我检查组标题复选框已选中子复选框,我想这样做。

【问题讨论】:

  • 请说明您究竟为什么要这样做,以及您认为需要从您的代码或 XAML 中的何处获得该访问权限。由于您将 Text 属性绑定到视图模型中的 Name 属性,因此您通常会访问视图模型属性而不是视图属性。
  • 解释够不够。

标签: c# .net wpf xaml


【解决方案1】:

在您的 xaml.cs 文件中,您只需要使用:

NameTextBox.Text

但您似乎使用的是 MVVM 模式,在 ViewModel 中您只需要使用您要绑定的变量:

Name

【讨论】:

  • 我不能那样做。
  • 我认为这是模板元素。
【解决方案2】:

我改变 复选框代码

<CheckBox x:Name="SelectGroupCheckBox" 
              Content="{Binding Name}"
              Checked="SelectGroupCheckBox_Checked"
              Unchecked="SelectGroupCheckBox_Unchecked"/>

在后面的代码中

private void SelectGroupCheckBox_Unchecked(object sender, RoutedEventArgs e)
{
            CheckBox checkBox = sender as CheckBox;
            checkBox.Content.ToString();
}

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 2015-10-31
    • 1970-01-01
    • 2017-07-20
    • 2012-07-06
    相关资源
    最近更新 更多