【问题标题】:StaticResource in DataTemplate does not resolveDataTemplate 中的 StaticResource 无法解析
【发布时间】:2013-10-12 19:24:56
【问题描述】:

我想我遇到了this question 中描述的相同问题。

<ItemsControl ItemsSource="{Binding Buttons}">
    ...
    <DataTemplate>
        <RadioButton Style="{StaticResource {x:Type ToggleButton}}"/>
    ...

在这种情况下,静态资源不会被解析。我尝试按照上面的链接将其更改为 DynamicResource 但这并不能解决问题。如何访问 DataTemplate 中的 StaticResource?

【问题讨论】:

  • 您引用的样式是如何以及在哪里定义的?
  • 我没有定义它......对 XAML 的这一面还不太熟悉。我需要在某个地方定义它吗?
  • 如果您只想在 RadioButton 上使用 ToggleButton 的默认样式(而不是您覆盖的默认样式),那么不。但这对我有用。你怎么知道资源没有被解析?
  • 如果样式已解决,那么我一次应该只能选择一个 RadioButton。如果没有,那么我可以选择尽可能多的。当我在 DataTemplate 之外定义 RadioButtons 时,它工作正常。在 DataTemplate 内部它不起作用。我还在 XAML 设计器中遇到“无法解决”错误。
  • RadioButton 的 one-of-a-group 行为由 RadioButton 的 GroupName 属性控制,样式与它无关。此外,当您将 TogglButton 样式应用于 RadioButton 时,它们看起来不再像 RadioButtons。

标签: c# xaml datatemplate staticresource


【解决方案1】:

如果您没有为单选按钮定义GroupName,那么它们将根据其父容器对其自身进行分组,即单个堆栈面板/网格/停靠面板中的所有单选按钮的行为就像它们具有相同的组名.您能否更改您的 UI 以使所有按钮都驻留在同一个容器中?

如果不可能,请在用户控件上定义 String 类型的属性,然后将 GroupName(在每个单选按钮上)绑定到该属性

GroupName="{Binding RelativeSource={RelativeSource FinsAncestor, AncestorType={x:Type my:MyUserControl}}, Path=CurrentGroupName}"

然后,在用户控件的每个实例上,您可以设置不同的组名。

【讨论】:

  • 我将它们全部放在单独的 Grid 容器中。问题仍然存在。我正在尽力避免为每个用户控件创建一个随机字符串作为 GroupName,但看起来我可能不得不走这条路。
  • 您不必创建随机字符串,让UserControl 的用户(即创建UC 实例的开发人员)来定义组。只要属性是DependencyProperty,他们就可以在需要时将其绑定到视图模型上的属性。
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2021-01-08
  • 1970-01-01
相关资源
最近更新 更多