2

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

  1. 我在另一个文件中有一种样式(例如MyTextStyle )说“ Generic.xaml
  2. 我的文本框在ABC.xaml
  3. 我想对这个文本框应用一些触发器,所以我必须使用 Textbox.Style
  4. 我也想申请“ MyTextStyle

当我这样做时,它给了我错误,我无法将 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 以及我的 datatrigger 样式

4

1 回答 1

8

改成DynamicResource这样StaticResource

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

在 BasedOn 中故意不允许 DynamicResource。

编辑: 你得到“找不到名为'EmptyTextBoxStyle'的资源”,因为应用程序找不到这个特定的静态资源。为了帮助应用程序找到它,您需要使用 MergedDictionary。以下是如何在例如 Window 中使用它的示例:

<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 属性)。

于 2012-09-11T13:21:43.583 回答