0

(WPF MVVM)独自のスタイルと ContentTemplate->StaticResource->DataTemplate の組み合わせを使用して一時停止/再生ボタンを作成しようとしています。DataTemplate をベクター グラフィック データに設定します。Pause-Button と Play-Button の 2 つのベクトル グラフィックスを用意しました。私の目標: 一時停止ボタンをクリックすると、ContentTemplate は Play-Button-DataTemplate に「切り替え」られ、ボタンは Play-Button になります。ボタンの Click-event をバインドするか、RelayCommand を使用して Pause/Play 操作を行う必要があることはわかっていますが (私のコード スニペットでは Click イベントをバインドしていません)、ContentTemplate をバインドして効果が必要です。前もって感謝します。

<controls:MyButton x:Name="btnPause" AutomationProperties.Name="btnPause" Style="{StaticResource MyButtonStyle}" ContentTemplate="{StaticResource dtmpPause}" />

<DataTemplate x:Name="dtmpPause">
        <Path x:Name="pathPause" Fill="White" Stretch="Uniform" Data="M314.00598,126.271 L379.52698,126.271 L379.52698,440.672 L314.00598,440.672 z M187.40198,126.271 L252.92398,126.271 L252.92398,440.672 L187.40198,440.672 z M283.45901,34.240997 C146.03,34.240997 34.229004,146.043 34.229004,283.45697 C34.229004,420.88702 146.03,532.70099 283.45901,532.70099 C420.88699,532.70099 532.70203,420.88702 532.70203,283.45697 C532.70203,146.043 420.88699,34.240997 283.45901,34.240997 z M283.45901,0 C439.772,0 566.92999,127.158 566.92999,283.45697 C566.92999,439.771 439.772,566.94299 283.45901,566.94299 C127.15799,566.94299 0,439.771 0,283.45697 C0,127.158 127.15799,0 283.45901,0 z"/>
</DataTemplate>

<DataTemplate x:Name="dtmpPlay">
    <Path x:Name="pathPlay" Fill="White" Stretch="Uniform" Data="M269.00003,121.50002 L298.00003,121.50002 L298.00003,445.50003 L269.00003,445.50003 z M283.5,41.621429 L41.620132,283.50198 L283.5,525.37958 L525.37982,283.50198 z M283.5,0 L566.99994,283.50198 L283.5,567 L0,283.50198 z"/>
</DataTemplate>
4

1 に答える 1

1

DataTemplateSelector を使用すると、定義された条件によって必要な DataTemplate を選択できます。これは、必要に応じて実装します。

次に例を示します。

public class TaskListDataTemplateSelector : DataTemplateSelector
{
    public override DataTemplate
        SelectTemplate(object item, DependencyObject container)
    {
        FrameworkElement element = container as FrameworkElement;

        if (element != null && item != null && item is Task)
        {
            Task taskitem = item as Task;

            if (taskitem.Priority == 1)
                return
                    element.FindResource("importantTaskTemplate") as DataTemplate;
            else
                return
                    element.FindResource("myTaskTemplate") as DataTemplate;
        }

        return null;
    }
}

この例では、DataContext の優先度に基づいて、任意の DataTemplate を返します。

xaml では、どの DataTemplateSelector を使用する必要があるかをコントロールに伝える必要があります。

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

この場合、myDataTemplateSelector は ListBox によって使用されます。

あなたの場合、その MyButton です。

于 2013-03-11T21:05:08.043 に答える