2012-11-14 5 views
3

나는이 그래서 사용자가 사용하는 (자신이 만든 트리거에 설명을 추가 할 수있다XamlReader .NET 3.5 '인식되지 스타일의 트리거 유형은'내 WPF 응용 프로그램에서

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

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

아래로 datatrigger 클래스를 확장 한 추가하고 제거하기위한 간단한 상황에 맞는 메뉴). XAML은 수출과 내가이

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

내가 파일을 사용하여 만든도 제대로 작동 .net4 작성이 응용 프로그램의 버전을 얻을 xamlreader 사용하여 파일을 다시로드에 올 때 사용 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 버전을 사용하지 못할 : 사용자가 .NET 3.5을 (실제로 4.0에서 일하고있다) 그러나

에서 트리거에 동의하지 트리거 컬렉션처럼 보인다 P

답변

1

을, 당신은 필요하지 않습니다 Description 속성을 추가하려는 경우 DataTrigger 클래스를 상속합니다.

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에서 설정 : 그건 첨부 속성 :

을 위해 무엇을 당신의 Control1.xaml.cs이 연결된 속성을 정의의

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