2012-09-11 29 views
2

我的要求是,在一个文本框应用多个样式有以下情况:结合DynamicResource来支持算法FMP风格

  1. 我有一个风格(例如MyTextStyle)在另一个文件中说,“Generic.xaml
  2. 我的文本框是ABC.xaml
  3. 我想一些触发器适用于这个文本框,所以我不得不使用Textbox.Style
  4. 我人所以想申请“MyTextStyle

当初我跟随它给了我,我不能适用DynamicResource来支持算法FMP错误:

<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风格

+0

为什么你想在BasedOn中使用DynamicResource而不是StaticResource? – Alexander

+0

,因为我的解决方案中的几乎所有文本框都使用了样式“MyTextStyle”。所以如果我为此文本框的目的而专门定义(和本地),这将是多余的。 – deathrace

回答

8

变化DynamicResourceStaticResource这样的:

<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> 

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

+0

我也试过。但它会引发运行时异常。抱歉,现在我无法向您展示我得到的例外情况。将再次尝试,并明天通知你。 – deathrace

+0

发生以下异常: “组合产生了单个组合错误,其根本原因如下:查看CompositionException.Errors属性以获取更多详细信息 1)无法找到名为'EmptyTextBoxStyle'的资源资源名称区分大小写”。 和名称是否正确(即'EmptyTextBoxStyle'拼写正确) – deathrace

+0

请参阅我的更新 – Alexander