Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将DynamicSource绑定到BasedOn样式_Wpf_Xaml - Fatal编程技术网

Wpf 将DynamicSource绑定到BasedOn样式

Wpf 将DynamicSource绑定到BasedOn样式,wpf,xaml,Wpf,Xaml,我的要求是在具有以下情况的文本框上应用多种样式: 我在另一个文件中有一个样式(例如,MyTextStyle),比如“Generic.xaml” 我的文本框是ABC.xaml 我想对这个文本框应用一些触发器,所以我必须使用Textbox.Style 我还想应用“MyTextStyle” 当我执行以下操作时,会出现无法将DynamicSource应用于BasedOn的错误: <TextBox.Style> <Style BasedOn="{D

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

  • 我在另一个文件中有一个样式(例如,MyTextStyle),比如“Generic.xaml”
  • 我的文本框是ABC.xaml
  • 我想对这个文本框应用一些触发器,所以我必须使用Textbox.Style
  • 我还想应用“MyTextStyle
  • 当我执行以下操作时,会出现无法将DynamicSource应用于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>
    
    
    

    请向我建议一些解决方案,以便我可以应用此DynamicSource以及我的datatrigger样式

    DynamicSource
    更改为
    StaticResource
    ,如下所示:

    <Style BasedOn="{StaticResource MyTextStyle}" TargetType="{x:Type TextBox}">
    
    
    
    BasedOn中故意不允许使用DynamicSource

    编辑: 您得到“找不到名为“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(当然,您需要根据您的项目结构更新源属性)。

    为什么要在BasedOn中使用DynamicSource而不是StaticResource?因为样式是“MyTextStyle”用于我的解决方案中的几乎所有文本框。因此,如果我为这个文本框专门(本地)定义它,这将是多余的。但它抛出运行时异常。抱歉,现在我无法向您展示我遇到的异常情况。将重试此操作,并于明天通知您。出现以下异常:“合成产生了一个合成错误。下面提供了根本原因。有关详细信息,请查看CompositionException.Errors属性。1)找不到名为“EmptyTextBoxStyle”的资源。资源名称区分大小写”。并且名称正确(即“EmptyTextBoxStyle”拼写正确)嗨。谢谢实际上,在我的解决方案中,ResourceDictionary被添加到控制器的一个构造函数中,该构造函数在这个ABC.xaml初始化之后被调用。不管怎么说,效果很好。非常感谢