3

私のwpfアプリケーションでは、以下のようにdatatriggerクラスを拡張しました

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

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

これは、ユーザーが作成したトリガーに説明を追加できるようにするためです (単純なコンテキスト メニューを使用してトリガーを追加および削除します)。次に、xamlreader を使用してファイルをリロードする際に、xaml がエクスポートされ、xamlwriter を使用してファイルに保存されます。

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

.net 3.5 バージョンを使用して作成されたファイルでも正しく動作する .net4 で記述されたこのアプリケーションのバージョンを持っているので、保存が良好であることはわかっています。

これは、重要でない部分を除いて作成されたもののサンプルです

         <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

4

1 に答える 1

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">
于 2012-11-14T09:52:59.540 に答える