【问题标题】:Finding controls in WPF ControlTemplate在 WPF ControlTemplate 中查找控件
【发布时间】:2011-04-07 13:46:46
【问题描述】:

我已经创建了继承自 Window 的类,并且我正在对其应用控制模板:

public class BaseSearchWindow : Window {
        static BaseSearchWindow() {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(BaseSearchWindow), new FrameworkPropertyMetadata(typeof(BaseSearchWindow)));
        }
        public BaseSearchWindow() {
            Uri uri = new Uri("/WPFLibs;component/Resources/StyleResources.xaml", UriKind.Relative);
            ResourceDictionary Dict = Application.LoadComponent(uri) as ResourceDictionary;
            this.Style = Dict["WindowTemplate"] as Style;
        }

比我想在控件模板中找到一些控件:

 public override void OnApplyTemplate() {

                RibbonCommand searchCommand = this.Template.FindName("searchCommand", this) as RibbonCommand;
               //doesn't work, searchCommand is null
                searchCommand.CanExecute += CanExecuteRibbonCommand;
    }

但它始终为空。 我在继承类中尝试过它并且它可以工作,但我希望它在我的基类中,所以我不必每次使用该类时都搜索它。 这有效:

public partial class MainWindow : BaseSearchWindow {
        public MainWindow() {
            InitializeComponent();
            RibbonCommand searchCommand = this.Template.FindName("searchCommand", this) as RibbonCommand;
            searchCommand.CanExecute += CanExecuteRibbonCommand;

        }   

【问题讨论】:

    标签: c# wpf controltemplate


    【解决方案1】:

    在OnApplyTemplate 中使用FindName 是正确的做法;我认为这不起作用,因为您忘记致电base.OnApplyTemplate()。

    【讨论】:

    • 我已经试过了,还是不行,但至少理论上应该。
    • 是的,但不是今天,我现在在家,我明天一上班就发。
    【解决方案2】:

    我敢打赌,您正在寻找一个不存在(或具有不同名称)或不是 RibbonCommand 的命令。

    那或者你没有为 xaml 中的命令指定 x:FieldModifier="protected"。

    【讨论】:

    • 不,因为它在扩展类中工作,正如我在问题中所述。
    【解决方案3】:

    其实我犯了一个错误。当我尝试查找不是 RibbonCommands 的控件时,它起作用了,所以现在我首先找到父控件,然后使用 VisualTreeHelper 查找 RibbonCommand。对此感到抱歉,我确信它仅在扩展课程中有效,但我想当我发布问题时我太累了。无论如何感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2010-09-14
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多