将DynamicResource绑定到BasedOn Style

时间:2012-09-11 12:45:21

标签: wpf xaml

我的要求是在具有以下情况的文本框中应用多种样式:

  1. 我在另一个文件中有一个样式(例如 MyTextStyle )说' Generic.xaml '
  2. 我的文本框位于 ABC.xaml
  3. 我想对这个文本框应用一些触发器,所以我必须使用Textbox.Style
  4. 我还想申请“ MyTextStyle
  5. 当我执行以下操作时,它给出了我无法将DynamicResource应用于BasedOn的错误:

    <TextBox.Style>
                        <Style BasedOn="{DynamicResource MyTextStyle}" TargetType="{x:Type TextBox}">
                            <Setter Property="Text" Value="{Binding SelectedCall.Name}" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding SelectedCall.Name}" Value="N/A">
                                    <Setter Property="Text" Value="" />
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
    

    请建议我一些解决方案,以便我可以应用此Dynamicresource以及我的数据触发器样式

1 个答案:

答案 0 :(得分:8)

DynamicResource更改为StaticResource,如下所示:

<Style BasedOn="{StaticResource MyTextStyle}" TargetType="{x:Type TextBox}">

在BasedOn中故意不允许使用DynamicResource。

修改 你有“无法找到名为'EmptyTextBoxStyle'的资源”,因为应用程序找不到这个特定的静态资源。要帮助应用程序找到它,您需要使用MergedDictionary。以下是如何在内部使用它的示例,例如窗口:

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/Generic.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

在另一个ResourceDictionary中,您应该使用以下内容:

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/Generic.xaml" />
</ResourceDictionary.MergedDictionaries>

您需要以这种方式引用包含EmptyTextBoxStyle样式定义的ResourceDictionary。因此,例如,如果在Generic.xaml文件中声明'EmptyTextBoxStyle'并且您在ABC.xaml中使用它,则可以使用上面的XAML(当然,您需要根据项目结构更新Source属性)。 / p>