1

ここで誰かが私を助けてくれることを願っています。私はイライラしています。

だからここに私の問題があります:

属性のリストがあります。この属性はコントロールのプロパティです。ここで、propertgrid とコントロール自体をバインドする必要があります。私のコントロール テンプレートは次のようになります。

<DataTemplate x:Key="LabelVisualObject" DataType="{x:Type ContentControl}">
    <ContentControl Content="{Binding}" ContentTemplateSelector="{StaticResource LabelLayoutTemplateSelector}">
            <ContentControl.Style>
                <Style TargetType="{x:Type ContentControl}">
                    <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Properties, Converter={StaticResource PropertyConverter}, ConverterParameter=VisualizationObjectTypeAttribute.Layout.Name}" Value="Layout_OneLine">
                            <Setter Property="ContentTemplate" Value="{StaticResource LabelOneLineVisualObject}"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=Properties, Converter={StaticResource PropertyConverter}, ConverterParameter=VisualizationObjectTypeAttribute.Layout.Name}" Value="Layout_TwoLines">
                            <Setter Property="ContentTemplate" Value="{StaticResource LabelTwoLinesVisualObject}"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </ContentControl.Style>
    </ContentControl>
</DataTemplate>

プロパティコンバーター

[ValueConversion(typeof(IEnumerable<IPropertyEditorAttribute>), typeof(object))]
public class PropertyConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && value is IEnumerable<IPropertyEditorAttribute>)
        {
            IEnumerable<IPropertyEditorAttribute> list = value as IEnumerable<IPropertyEditorAttribute>;

            foreach (IPropertyEditorAttribute cur in list)
            {
                if (cur.Name.Equals(parameter.ToString(), StringComparison.InvariantCultureIgnoreCase))
                {
                    return cur.Value;
                }
            }
        }
        return null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

さて、私の機会は、ユーザーがプロパティグリッドのレイアウトを変更すると、トリガーが反応してテンプレートを変更することです。

誰が知っていますか、どうすればこれを行うことができますか??

パトリックに挨拶します

4

2 に答える 2

2

を探しているかもしれませんDataTemplateSelector

ここで短いチュートリアルを見つけることができます: DataTemplateSelector の使用方法

または MSDN ドキュメントから:

于 2012-06-29T11:03:20.137 に答える
0

ContentTemplateSelector設定する場所があり、を介してContentTemplateを設定しようとします。両方を同時に使用することは機能せず、おそらくローカル値として優先されます。ContentTemplateStyleContentTemplateSelector

于 2012-06-29T11:19:47.047 に答える