いくつかのRibbonCommandsを持つRibbonmenuにMicrosofts RibbonControlLibraryを使用しています。押された各リボン ボタンのタブを含む TabControl があります。たとえば、RibbonCommand 2 をクリックすると、TabControl にまだ存在しない場合は「Tab2」というタブを作成し、それ以外の場合はフォーカスする必要があります。
私はすでにhttp://www.codeproject.com/KB/WPF/WpfTabClos eButton.aspx を実装しています。これは非常に優れています。
私はまだ WPF のイベント メカニズムを正しく理解していないと思います。私のコードは、Ribboncontrol のサンプル プロジェクトを大幅に変更しました。
これがコマンドの実装方法です。
<Window.CommandBindings>
<CommandBinding Command="me:AppCommands.Protokoll" Executed="RibbonButton_Click" />
</Window.CommandBindings>
RibbonControl 内のボタンは次のようになります。
<r:RibbonButton Command="me:AppCommands.Protokoll" />
AppCommands.cs
public class AppCommands
{
public static RibbonCommand Protokoll
{
get { return (RibbonCommand)Application.Current.Resources["ProtokollCommand"]; }
}
}
リソース辞書:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">
<r:RibbonCommand x:Key="ProtokollCommand"
LabelTitle="foo"
ToolTipTitle="foo"
ToolTipDescription="foo" />
</ResourceDictionary>
私が今書きたいのは、ボタンのクリックごとにタブを作成するメソッドです。作成されたタブページには特定のユーザーコントロールが含まれています。CommandButtons と Tabs の間のマッピングを最適に実装する方法がわかりません。ボタンごとにイベントハンドラーを使用するのではなく、クリックイベントハンドラーを 1 つだけ使用するのが最善だと思います。 質問:
1)イベントを発生させた固有のボタンを特定するにはどうすればよいですか? ResourceDictionary で情報を取得することしかできませんでした。残念ながら、uniqueID などのプロパティはありません。私はこれを行いました:
private void RibbonButton_Click(object sender, RoutedEventArgs e)
{
// ((Microsoft.Windows.Controls.Ribbon.RibbonCommand)(((System.Windows.Controls.Button)(e.OriginalSource)).Command))
}
LabelTitle のような表示用のプロパティに基づいてマッピングを作成したくありません。
2) この WPF/C# を見つけました: TabControl 内で TabItems を参照するにはどうすればよいですか? これは、TabControl の Items コレクションを照会する方法を示しました。それは良い試みですか、それとももっと良い試みがありますか?
3)
表示する必要がある、RibbonCommand と TabPage + Controls の間のマッピングを作成するにはどうすればよいですか。もちろん、次のような辞書を使用できます
Dictionary<String, fooContainer>
// ...
public class fooContainer()
{
public String TabHeaderString {get;set;}
// other properties
}
それとも、私が今まで理解していなかったこれらの ResourceDictionaries を使用して、WPF がより良いアプローチを提示するのでしょうか。