Laden...

Menu Item Data Context

Erstellt von nilres vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.157 Views
N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren
Menu Item Data Context

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

P
157 Beiträge seit 2010
vor 13 Jahren

Eine Frage du willst die Dependency Eigenschaft ändern???
Die hast du als Readonly Eingetragen

N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren

Das ist nur die statische Deklaration... du kennst dich damit nicht aus oder?

P
157 Beiträge seit 2010
vor 13 Jahren

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?

N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren

Genau - Problem dabei ist wie gesagt wie ich das mit dem selektieren der MenuItems hinebekomme.

P
157 Beiträge seit 2010
vor 13 Jahren

Entweder machst du es über MouseDown bzw. MouseLeftButtonDown
oder du nutzt RadioButtons und hier ebenfalls über MouseLeftButtonDown

N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren

Ja ich werde noch mal was versuchen mir ist da gerade so eine Idee gekommen.

P
157 Beiträge seit 2010
vor 13 Jahren

Ist die Anzahl der MenuItems eigentlich fest vorgeschrieben?

N
nilres Themenstarter:in
60 Beiträge seit 2010
vor 13 Jahren

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.

P
157 Beiträge seit 2010
vor 13 Jahren

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;
}