求助,WPF中如何获取中的控件

ADSL9688 2013-07-18 10:28:15
<ListView>
               <ListView.View>
                   <GridView>
                       <GridViewColumn>
                           <GridViewColumn.CellTemplate>
                               <DataTemplate>
<Grid>
<RichTextBox>
<FlowDocument>
<Paragraph>
<DockPanel>
<RichTextBox x:Name="RtBox">
<FlowDocument>
<Paragraph>
<Image Source=""/>
<Run Text="{Binding Text}"/>
<Paragraph>
</FlowDocument>
</RichTextBox>
</DockPanel>
</Paragraph>
</FlowDocument>
</RichTextBox>
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridView>
 <ListView.View>
<ListView>
                 


该如何获取到叫RtBox的RichTextBox ,我想用后台的代码控制是否启用这一控件。
...全文
581 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ADSL9688 2013-07-23
  • 打赏
  • 举报
回复
引用 9 楼 ADSL9688 的回复:
[quote=引用 7 楼 magicyangjay111 的回复:] 在Override OnApplyTemplate方法里可以调用GetTemplateChild()方法来获取DataTemplate的元素
public override void OnApplyTemplate()
{
            base.OnApplyTemplate();

_richBox = this.GetTemplateChild("RtBox") as RichBox;
}

_richBox是你自定义的变量 就可以控制这个richBox了
代码修改了一下 RichText richBox = this.GetTemplateChild("RtBox") as RichTextBox; 获取不到,报错未将对象引用到设置对象的实例。因为我两个RichTextBox嵌套的问题? 并且这样定义只是局部变量。 该怎么修改代码?[/quote] 下面引用来自MSDN的一段话: 若要在初始的加载和处理之后向元素树添加任何元素,都必须对定义名称范围的类调用相应的 RegisterName 的实现。否则,无法通过 FindName 等方法按名称引用添加的对象。仅设置 Name 属性(或x:Name 属性)不会将该名称注册到任何名称范围中。将命名的元素添加到具有名称范围的元素树中也不会将此名称注册到名称范围中。尽管名称范围可以嵌套,但通常您应该将名称注册到根元素上存在的名称范围中,这样您的名称范围位置便可与在等效的加载 XAML 页中可能已创建的名称范围并列。 应用程序开发人员最常用的方案是使用 RegisterName 将名称注册到当前根元素的名称范围中。RegisterName 是查找将作为动画运行的演示图板的一种重要方案的一部分。
TechLead KrisChang 2013-07-19
  • 打赏
  • 举报
回复
前提是你绑定的itemsource有东西~不然listview不会做出来这个element的~
TechLead KrisChang 2013-07-19
  • 打赏
  • 举报
回复
还有一种方法~ 在richitextbox 的loaded事件里来获得这个元素
                                                    <RichTextBox Loaded="RtBox_Loaded_1"
                                                        x:Name="RtBox">

        private void RtBox_Loaded_1(object sender, RoutedEventArgs e)
        {
            var richTextBox= (RichTextBox)sender;
        }
sender就是你想要拿到的richtextbox
TechLead KrisChang 2013-07-19
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/bb613579.aspx 这里还有一些方法可以做这件事。你应该要先绑定好ItemSource再搜索richitextbox里元素 没有items的话cell template估计get不到
ADSL9688 2013-07-18
  • 打赏
  • 举报
回复
引用 3 楼 ariesget 的回复:
FindName()
具体怎么用?
ADSL9688 2013-07-18
  • 打赏
  • 举报
回复
引用 2 楼 lhx527099095 的回复:
根据wpf的思想 你需要使用绑定来控制 而不是代码控制
绑定只能绑定数据。。。 怎么绑定状态啊。。。
hudsonhuang 2013-07-18
  • 打赏
  • 举报
回复
引用 4 楼 ADSL9688 的回复:
[quote=引用 2 楼 lhx527099095 的回复:] 根据wpf的思想 你需要使用绑定来控制 而不是代码控制
绑定只能绑定数据。。。 怎么绑定状态啊。。。[/quote] 也是可以的
ariesget 2013-07-18
  • 打赏
  • 举报
回复
FindName()
ADSL9688 2013-07-18
  • 打赏
  • 举报
回复
没有我想要的答案,再顶。。。
lhx527099095 2013-07-18
  • 打赏
  • 举报
回复
根据wpf的思想 你需要使用绑定来控制 而不是代码控制
ADSL9688 2013-07-18
  • 打赏
  • 举报
回复
沉了,顶一下
ADSL9688 2013-07-18
  • 打赏
  • 举报
回复
引用 7 楼 magicyangjay111 的回复:
在Override OnApplyTemplate方法里可以调用GetTemplateChild()方法来获取DataTemplate的元素
public override void OnApplyTemplate()
{
            base.OnApplyTemplate();

_richBox = this.GetTemplateChild("RtBox") as RichBox;
}

_richBox是你自定义的变量 就可以控制这个richBox了
代码修改了一下 RichText richBox = this.GetTemplateChild("RtBox") as RichTextBox; 获取不到,报错未将对象引用到设置对象的实例。因为我两个RichTextBox嵌套的问题? 并且这样定义只是局部变量。 该怎么修改代码?
ADSL9688 2013-07-18
  • 打赏
  • 举报
回复
引用 6 楼 feng41602213 的回复:
Visibility属性绑定到一个变量,控制那个变量就行了,一个效果。
还有其他方法么?如果能获取到控件就可以更好的控制它了。
TechLead KrisChang 2013-07-18
  • 打赏
  • 举报
回复
在Override OnApplyTemplate方法里可以调用GetTemplateChild()方法来获取DataTemplate的元素
public override void OnApplyTemplate()
{
            base.OnApplyTemplate();

_richBox = this.GetTemplateChild("RtBox") as RichBox;
}

_richBox是你自定义的变量 就可以控制这个richBox了
feng41602213 2013-07-18
  • 打赏
  • 举报
回复
Visibility属性绑定到一个变量,控制那个变量就行了,一个效果。

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧