1

こんにちは、イベントセッターに問題があります。
私の窓:

<TreeView.Resources>
    <ResourceDictionary> 
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary 
                 Source="CrefoChartTreeViewItemStyle.xaml" />
        </ResourceDictionary.MergedDictionaries>
        <HierarchicalDataTemplate 
            DataType="{x:Type local:Node}" 
            ItemsSource="{Binding ChildNodes}">
        </HierarchicalDataTemplate>
    </ResourceDictionary>
</TreeView.Resources>

私の CrefoChartTreeViewItemStyle.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ed="http://schemas.microsoft.com/expression/2010/drawing"
mc:Ignorable="d"
>
    <Style TargetType="TreeViewItem">
        <Style.Resources>
            <LinearGradientBrush x:Key="ButtonBrush" EndPoint="0,1" StartPoint="0,0">
                <GradientStop Color="White" Offset="0.25"/>
                <GradientStop Color="#FFA5DBE9" Offset="1"/>
            </LinearGradientBrush>
            <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
                <Setter Property="Background" Value="{DynamicResource ButtonBrush}" />
                <EventSetter Event="Click" Handler="ButtonOnClick" />
            </Style>
        </Style.Resources>  

コンパイルするとエラーメッセージが表示されます:

The event 'click' can not be specified on a Target tag in a Style. Instead, use "EventSetter".

私は何を間違っていますか?

ツリービューでこのボタンをトリガーする他の方法はありますか? だから私はコードを後ろに置くことができますか?

4

1 に答える 1

1

これは機能しません。リソース xaml はコード ビハインド ファイルを持つことができないため、通常は「loose xaml」と呼ばれます。それについては、EventSetter に関する msdn で読むことができます。できることとすべきことは、イベントをコマンドに変換するものを使用することです。たとえば、AttachedCommandBehaviorは MVVM と非常にうまく連携します。要求どおりにイベントを使用する場合は、TreeView を UserControl に配置してから、イベントを使用できます。

于 2012-11-26T10:12:27.063 に答える