【问题标题】:Compile Error: Window does not contain definition for template, even though template is defined. WPF C#编译错误:即使定义了模板,窗口也不包含模板的定义。 WPF C#
【发布时间】:2020-04-13 20:56:49
【问题描述】:

我正在尝试根据某些条件切换数据网格的模板,但即使我定义了模板,程序也无法编译,说我的窗口不包含所述模板的定义。

XAML

<ControlTemplate TargetType="DataGrid" x:Name="myGrid">
            <DataGrid>
                <DataGrid.Columns>
                    <DataGridTextColumn Header="ID" Binding="{Binding ID}"></DataGridTextColumn>
                    <DataGridTextColumn Header="Tag" Binding="{Binding Tag}"></DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
 </ControlTemplate>

C#

if (mybool == true)
            scrollWin.gridMain.Template = scrollWin.myGrid;

这似乎是一个“只需重新启动 Visual Studio”的问题,但这并没有帮助。在尝试运行程序之前,我没有收到任何错误,将鼠标悬停在“myGrid”上表明它将其识别为 scrollWin 的成员。有什么想法吗?

【问题讨论】:

  • 你把ControlTemplate 放在哪里了?这是资源,不是吗?而gridMain是什么元素?
  • 我只是把控制模板放到Datagrid里面我要改的那个模板就是gridMain。
  • 究竟在什么元素里面?
  • 直接在数据网格内部,而不是样式或资源或任何东西。 &lt;DataGrid Name="gridMain"&gt; &lt;ControlTemplate Name=myGrid....etc
  • 这毫无意义。它应该被定义为一种资源。看我的回答。

标签: c# wpf datagrid controltemplate


【解决方案1】:

ControlTemplate 应该被定义为一个 resourcex:Key 而不是 x:Name:

<ControlTemplate TargetType="DataGrid" x:Key="myGrid">

如果您随后放入gridMainResources 字典(&lt;Grid.Resources&gt; 或任何类型的grdMainis),您可以获得这样的引用:

scrollWin.gridMain.Template = scrollWin.gridMain.Resources["myGrid"] as ControlTemplate;

模板本身的定义看起来有点奇怪,但这是另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    相关资源
    最近更新 更多