1
我建造這樣的RibbonGroupBox在C#文件:如何在C#代碼中動態設置DataContext?
public class TextControl : RibbonGroupBox
{
public TextControl()
{
const double widthOfComboBoxes = 150;
Binding fontsBinding = new Binding();
fontsBinding.Source = (TextControlVM)DataContext;
fontsBinding.Path = new System.Windows.PropertyPath("Fonts");
fontsBinding.Mode = BindingMode.TwoWay;
Binding fontSizeBinding = new Binding();
fontSizeBinding.Source = (TextControlVM)DataContext;
fontSizeBinding.Path = new System.Windows.PropertyPath("FontSize");
fontSizeBinding.Mode = BindingMode.TwoWay;
/* Combobox for the fonts (Arial, etc.) */
Fluent.ComboBox fontCombo = new Fluent.ComboBox();
fontCombo.SetBinding(Fluent.ComboBox.ItemsSourceProperty, fontsBinding);
fontCombo.SelectedItem = ((TextControlVM)DataContext).DefaultFont;
fontCombo.Width = widthOfComboBoxes;
this.AddChild(fontCombo);
/* Combobox for the fontsizes */
Fluent.ComboBox fontSizeCombo = new Fluent.ComboBox();
fontSizeCombo.SetBinding(Fluent.ComboBox.ItemsSourceProperty, fontSizeBinding);
fontSizeCombo.SelectedItem = ((TextControlVM)DataContext).DefaultFontSize;
fontSizeCombo.Width = widthOfComboBoxes;
this.AddChild(fontSizeCombo);
}
}
我還具有一個包含字體,字號,DefaultFont和DefaultFontSize性能視圖模型(TextControlVM)。
當我現在在這樣的另一個模塊利用這一點,在DataContext在上面的例子中爲空:
<Fluent:RibbonTabItem Header="Export">
<TextControl DataContext="{Binding DataContext.TextControl}"/>
</Fluent:RibbonTabItem>
當我建立與XAML代碼一切正常的RibbonGroupBox,所以我想要做的XAML自動做。我怎樣才能做到這一點?
背景:我想在幾個模塊中使用RibbonGroupBox。這就是爲什麼我用C#代碼構建它,以便我可以動態訪問它。 DataContext將改變調用的依賴。
的不幸的是,這並沒有奏效。仍然DataContext爲null。 – Hauke
@Hauke我會建議使用像Snoop這樣的工具,並確保你的'RibbonTabItem'包含一個'DataContext',它具有一個名爲'TextControl'的屬性並且是'TextControlVM'類型。 Snoop網站是http://snoopwpf.codeplex.com/ – Rachel
Thx。我會嘗試。 – Hauke