WPF C#怎么访问<Window.Resources>中DataTemplate里的控件

WPF C#怎么访问<Window.Resources>中DataTemplate里的控件

WPF C#如何访问<Window.Resources>中DataTemplate里的控件
aresskyaressky 于 2014-08-23 04:47:39 编辑
XAML的 资源里有一个 DataTemplate下面包含一个TextBox,TextBox的值是通过绑定后台的某个集合来的,我现在需要不通过那个集合来 修改这个TextBox的值,在C#中 dt3/gbDir/tbDir这三个名称都无法访问!!!而且这个DataTemplate 不能设置x:Key,加上x:Key,窗体右侧的与其绑定的ContentControl的内容就不能正常显示!!!所以不能用this.Resources["Key"]的方法。真是无语啊。
<Window.Resources>
        <DataTemplate x:Name="dt3" DataType="{x:Type settingbase:DirSettings}">
            <GroupBox Name="gbDir" Header="{DynamicResource OptionsSkins}" Margin="0,-0.96,0,0" BorderThickness="1" d:DesignWidth="416" d:DesignHeight="257.96" Height="114" Width="Auto">
                <Grid>
                    <TextBox Name="tbDir" HorizontalAlignment="Left" Margin="8,28,0,0" Width="400" Text="{Binding DirPath}" VerticalAlignment="Top"/>
                </Grid>
            </GroupBox>
        </DataTemplate>
    </Window.Resources>

通过循环资源,可以查询到这个TextBox但是,仍然无法访问,搞了1天了,求解!!!

foreach (var item in this.Resources.Values){
    if (item.GetType().ToString() == "System.Windows.DataTemplate"){
          DataTemplate MyDataTemplate = (DataTemplate)item;
          try{
               GroupBox MyGroupBox = (GroupBox)MyDataTemplate.LoadContent();
               TextBox MyTextBox = MyGroupBox.FindName("tbDir") as TextBox;
                   if (MyTextBox != null){
                       MessageBox.Show("ok");
                       MessageBox.Show(MyTextBox.Name);//显示tbDir正确
                       MessageBox.Show(MyTextBox.Text);//显示为空
                       MyTextBox.Text = "fdafdsa";     //无效
               }
          } catch { }
    }
}

------解决方案--------------------
WPF是树形结构,而树形结构分为 逻辑树与可视化树。模板应该属于逻辑树。
参见:http://blog.csdn.net/duanzi_peng/article/details/17094639

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值