zoukankan      html  css  js  c++  java
  • WPF 获取ControlTemplate 中的控件方法

    1 CheckBox cbSelect = (CheckBox)(ListBoxView.Items[i] as ListBoxItem).Template.FindName("cbSelect", ListBoxView.Items[i] as ListBoxItem);
    2 TextBlock textblackConnPointNum = (TextBlock)(ListBoxView.Items[i] as ListBoxItem).Template.FindName("textblackConnPointNum", ListBoxView.Items[i] as ListBoxItem);
    3 TextBlock textblackConnPointNam = (TextBlock)(ListBoxView.Items[i] as ListBoxItem).Template.FindName("textblackConnPointName", ListBoxView.Items[i] as ListBoxItem);
    4 ComboBox cbGroup = (ComboBox)(ListBoxView.Items[i] as ListBoxItem).Template.FindName("cbGroup", ListBoxView.Items[i] as ListBoxItem);
    5 CheckBox cbPublic = (CheckBox)(ListBoxView.Items[i] as ListBoxItem).Template.FindName("cbPublic", ListBoxView.Items[i] as ListBoxItem);

    对应着xaml:

    1 <ContentControl>
    2 <Grid>
    3 <CheckBox Name="cbSelect" Margin="2,0,0,0" VerticalAlignment="Center" IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" <ContentPresenter Margin="2"/>
    4 5   <TextBlock Width="80" Name="textblackConnPointNum" TextAlignment="Center" Text="{Binding Path=ConnPointNum}"/>
    6    <TextBlock Width="150" Name="textblackConnPointName" Text="{Binding Path=ConnPointName}" TextAlignment="Center"/>
    7 ......
    8 </Grid>
    9 </ContentControl>

    在ControlTemplate中找控件最重要的就是让控件初始化到visualtree上,所以如何没有找到ControlTemplate的控件就有可能是控件还未能加载到visualtree。

    可以用一下两种方式强制刷新模板控件至visualtree.

    第一种是UpdateLayout()  方法。

    但是MSDN提示:如果 UI 中存在大量元素,则频繁调用 InvalidateArrange(尤其是频繁调用 UpdateLayout)将会对性能产生重大影响。除非代码中后续调用其他 API 绝对需要精确的布局状态,否则请避免调用此方法。

    第二种方案:

      private delegate void NoArgDelegate();

            public static void Refresh(DependencyObject obj)
            {

                obj.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.ApplicationIdle, (NoArgDelegate)delegate { });

            }



  • 相关阅读:
    Bash 命令的解析
    vscode ctrl+P 打开文件后固定文件
    Linux 使用 tree 命令生成文件目录结构
    分享一款“暗黑系列”Idea主题插件Material Theme【改】
    linux上搭建svn服务器并设置自启动
    springBoot项目里获取resource目录下的文件(可用于各种linux服务器部署)【我】
    linux下svn与apache整合搭建
    liunx设置utf-8
    Fiddler抓包,并修改请求数据
    解决vue+el使用this.$confirm,不能阻断代码往下执行
  • 原文地址:https://www.cnblogs.com/midcn/p/2055276.html
Copyright © 2011-2022 走看看