2012-11-14 28 views
3

以我的WPF應用程序我已經擴展了datatrigger類,如下XamlReader .NET 3.5「在樣式觸發類型無法識別」

public class DescriptiveTrigger : System.Windows.DataTrigger 
{ 
    public DescriptiveTrigger() 
    { 
    } 

    private String _Description = ""; 
    public String Description 
    { 
     get { return _Description; } 
     set { this._Description = value; } 
    } 
} 

這使用戶可以描述添加到他們創建的觸發(用一個簡單的上下文菜單來添加和刪除它們)。那麼XAML導出並保存,當涉及到使用xamlreader我得到這個

'MyControls.DescriptiveTrigger' trigger type in Style not recognized. Error at object 'System.Windows.Style', Line 283 Position 22. 

我有一個版本的應用程序寫在.NET4是正常工作,即使文件使用創建的重新讀入文件到文件使用的XamlWriter .net 3.5版本,所以我知道保存是好的。

下面是一個簡單的生產什麼減去非重要部位

  <Control1 xmlns="clr-namespace:MyControls.Controls;assembly=MyControls" 
    xmlns:av="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:dc="clr-namespace:MyControls;assembly=MyControls" 
     xmlns:dcc="clr-namespace:MyControls.Converters;assembly=MyControls" 
     xmlns:s="clr-namespace:System;assembly=mscorlib"> 
     ......... 
     <av:Label BorderBrush="#FF000000" BorderThickness="1,1,1,1" Background="#FF008000" Foreground="#FFFFFFFF" HorizontalAlignment="Left" VerticalAlignment="Center" ContextMenu="{av:DynamicResource LabelContextMenuKey}" av:Grid.Column="1"> 
      <av:Label.Style> 
      <av:Style TargetType="av:IFrameworkInputElement"> 
       <av:Style.Triggers> 
       <dc:DescriptiveTrigger Description="Background Color Trigger Where Value Is Greater Than 100"> 
        <dc:DescriptiveTrigger.Binding> 
        <av:Binding Path="Content" ConverterParameter="100" RelativeSource="{av:RelativeSource Mode=Self}"> 
         <av:Binding.Converter> 
         <dcc:GreaterThanToBooleanConverter /> 
         </av:Binding.Converter> 
        </av:Binding> 
        </dc:DescriptiveTrigger.Binding> 
        <av:Setter Property="av:Panel.Background"> 
        <av:Setter.Value> 
         <av:SolidColorBrush>#FF0000FF</av:SolidColorBrush> 
        </av:Setter.Value> 
        </av:Setter> 
        <dc:DescriptiveTrigger.Value> 
        <s:Boolean>True</s:Boolean> 
        </dc:DescriptiveTrigger.Value> 
       </dc:DescriptiveTrigger> 
       </av:Style.Triggers> 
       <av:Style.Resources> 
       <av:ResourceDictionary /> 
       </av:Style.Resources> 
      </av:Style> 
      </av:Label.Style>000 
     </av:Label> 
     .......... 
     </Control1> 

我怎樣才能解決這個問題?沒有我不能只使用.NET4版本:P

回答

1

這似乎是觸發採集不接受定製觸發.NET 3.5(它在4.0實際工作)

但是,你並不需要如果您只想添加一個Description屬性,則繼承DataTrigger類。這就是附加屬性是:)

在Control1.xaml.cs定義這個附加屬性:

public static string GetDescription(DependencyObject obj) 
    { 
     return (string)obj.GetValue(DescriptionProperty); 
    } 

    public static void SetDescription(DependencyObject obj, string value) 
    { 
     obj.SetValue(DescriptionProperty, value); 
    } 

    // Using a DependencyProperty as the backing store for Description. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty DescriptionProperty = 
     DependencyProperty.RegisterAttached("Description", typeof(string), typeof(Control1), new UIPropertyMetadata(string.Empty)); 

,簡單地將其設置在你XAML:

<DataTrigger dc:Control1.Description="Background Color Trigger Where Value Is Greater Than 100">