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"]的方法。真是无语啊。
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