Hallo Leute,
ich habe folgende Situation. Ich entwickle ein eigenes kleines UserControl. In diesem UserControl gibt es folgendes DependencyProperty:
public static readonly DependencyProperty FillModeProperty = DependencyProperty.Register("FillMode", typeof(FillMode), typeof(MyControl), new PropertyMetadata(FillMode.Solid, FillModeChangedCallback, null), null);
FillMode ist ein Enum. Jetzt möchte ich über ein Menü diesen Wert verändern. Dazu habe ich bereits folgendes hin bekommen:
<Menu.Resources>
<ObjectDataProvider x:Key="FillModes" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Graphics:FillMode"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Menu.Resources>
<MenuItem Header="FillMode" DataContext="{Binding FillModeProperty}" ItemsSource="{Binding Source={StaticResource FillModes}}" >
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.IsCheckable" Value="True" />
<Setter Property="MenuItem.Header" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
Das klappt gut. Angezeigt wird alles richtig. Was ich nicht hinkriege und wo ich hoffe das ihr Tipps dazu habt ist folgendes: Ich möchte das man jetzt ein MenuItem anklicken kann dann das DependencyProperty mit dem Wert gefüllt wird. Die IsChecked-Eigenschaft von dem Feld auf true gesetzt wird und die IsChecked-Eigenschaft aller anderen MenuItems auf false gesetzt wird.
Wie geht so was?
Grüße
Nils
Eine Frage du willst die Dependency Eigenschaft ändern???
Die hast du als Readonly Eingetragen
Das ist nur die statische Deklaration... du kennst dich damit nicht aus oder?
Doch schon
ich weiß in deinem Code steht
public FillMode FillMode
{
get{return (FillMode)GetValue(FillModeProperty);}
set {SetValue(FillModeProperty,value);}
}
und über die OnClick Methode deines MenuItems
OnClick(Object sender,EventArgs e)
{
FillMode = ...
}
Oder wie meinst du das?
Genau - Problem dabei ist wie gesagt wie ich das mit dem selektieren der MenuItems hinebekomme.
Entweder machst du es über MouseDown bzw. MouseLeftButtonDown
oder du nutzt RadioButtons und hier ebenfalls über MouseLeftButtonDown
Ja ich werde noch mal was versuchen mir ist da gerade so eine Idee gekommen.
Ist die Anzahl der MenuItems eigentlich fest vorgeschrieben?
Sie ist gegeben durch die Menge der Elemente im enum. Sprich über die Enum-Klasse würde man da ran kommen. Ich werde das am ende für mindestens 2 Sachen brauchen. Mit unterschiedlich vielen Einträgen.
Weil doch alle in ner Liste gespeichert sind, also kannste ja alle Durchsuchen, oder aber, da du ja sowieso nur eins als Checked registriert hast kannste es ungefähr so gestalten
MenuItem CheckedItem;
OnClick(object sender,EventArgs e)
{
CheckedItem.isChecked = false;
CheckedItem=(MenuItem) sender;
CheckedItem.isChecked = true;
}