Henehefu 用 ウィキ

メニュー



- Views

最近の更新

取得中です。

WPFメモ > MVVMとツールバー


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ツールバー(ToolBar)のItemsSourceにコレクションをバインドすると何かうまくいかないの問題の対処法


再現

ViewModelを適当に作る

public class Commander
    {
        public string Title
        {
            get;
            set;
        }
 
        public ICommand Command
        {
            get;
            set;
        }
    }
 

ツールバーを作る

<ToolBar DockPanel.Dock="Top" ItemsSource="{Binding Commands}">
    <ToolBar.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Title}" Command="{Binding}" />
        </DataTemplate>
    </ToolBar.ItemTemplate>
</ToolBar>
 

問題点

  1. ウィンドウをリサイズしないと項目が隠れる
  2. ボタンのスタイルが標準のツールバーのと違う

対処法という名の回避方

「ウィンドウをリサイズしないと項目が隠れる」の対処

ToolBarを派生させてゴニョゴニョする。
(何をやってるかは知らない)
public class WorkaroundToolBar : ToolBar
    {
        private delegate void IvalidateMeasureJob();
        public override void OnApplyTemplate()
        {
            Dispatcher.BeginInvoke(new IvalidateMeasureJob(InvalidateMeasure),
                                         DispatcherPriority.Background, null);
            base.OnApplyTemplate();
        }
    }
 

「ボタンのスタイルが標準のツールバーのと違う」の対処法

ButtonのStyleにツールバーのボタンスタイルを指定する。
<Button Style="{DynamicResource {x:Static ToolBar.ButtonStyleKey}}" />
 

ツールバーのテーマを継承する場合次も追加

<Style TargetType="v:WorkaroundToolBar" BasedOn="{StaticResource {x:Type ToolBar}}" />
 

んでこうする

<v:WorkaroundToolBar DockPanel.Dock="Top" ItemsSource="{Binding}">
    <v:WorkaroundToolBar.ItemTemplate>
        <DataTemplate>
            <Button Content="{Binding Title}" Command="{Binding Command}"
                    Style="{DynamicResource {x:Static ToolBar.ButtonStyleKey}}"/>
        </DataTemplate>
    </v:WorkaroundToolBar.ItemTemplate>
</v:WorkaroundToolBar>
 

パクリ元

タグ一覧