locked
ComboBoxItems deaktivieren??? RRS feed

  • Frage

  • Hallo,

    ich habe ein ComboBox mit einem bestimmten Template:

    <ComboBox x:Name="user" Grid.Column="1" Height="60" Width="340" HorizontalAlignment ="left" Margin="20,-35,0,0" 
                              ItemTemplate="{StaticResource OwnerPropertyEditorsTemplate}" ItemsSource="{Binding Owners}" KeyUp="cboSimple_KeyUp1">
    
                        <ComboBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <VirtualizingStackPanel Orientation="Vertical" KeyUp="cboSimple_KeyUp1"/>
                            </ItemsPanelTemplate>
                        </ComboBox.ItemsPanel>
                    </ComboBox>
    
    
    
    <DataTemplate x:Key="OwnerPropertyEditorsTemplate">
    
                <Border Margin="10 10 10 5">
                    <Grid Margin="0, -8, 0,0">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <TextBlock Margin="0,0,0,3" Text="{Binding Name}" FontSize="14"/>
                        <ToggleButton HorizontalAlignment="Left" Grid.Row="1" Content="Im Kalender zeigen" IsChecked="{Binding ShowInCalendar, Mode=TwoWay}" />
                        <StackPanel Grid.Row="1" Orientation="Horizontal">
                            <TextBlock Margin="150 3 0 0" Text="Farbe: " />
                            <ComboBox Margin="0 0 0 0" ItemsSource="{Binding OwnerColorsList}" DisplayMemberPath="DisplayName" 
                                      SelectedValue="{Binding Color, Mode=TwoWay}" Width="89" />
                        </StackPanel>
                    </Grid>
                </Border>
    
            </DataTemplate>       

    Würde gerne wissen, wie ich bestimmte Items von dem ComboBox auf isEnabled = false setzen kann?


    Gruesse, NUNUI

    Montag, 24. Februar 2014 16:19

Antworten

  • Montag, 24. Februar 2014 16:42
  • Hallo,
    da du die ComboBox gebunden hast, ist es am einfachsten in jedem Item eine Eigenschaft dafür bereit zu halten:

    public class Owner{
    public bool IsEnabled { get; set; }
    //usw.
    Nun kannst du im XAML einen Style für deine ComboBoxItems anlegen, welcher die IsEnabled-Eigenschaft bindet:
    <ComboBox x:Name="user" Grid.Column="1" Height="60" Width="340" HorizontalAlignment ="left" Margin="20,-35,0,0" 
                        ItemTemplate="{StaticResource OwnerPropertyEditorsTemplate}" ItemsSource="{Binding Owners}" KeyUp="cboSimple_KeyUp1">
        <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            </Style>
        </ComboBox.Resources>
    Du könntest auch die einzelnen Controls im Template deaktivieren, dann müsstest du aber selbst dafür sorgen, dass man diese nicht mehr auswählen kann.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Montag, 24. Februar 2014 16:43
  • Ich habe jetzt 

    <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            </Style>
        </ComboBox.Resources>

    mit

    <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            </Style>
        </ComboBox.ItemContainerStyle>

    ersetzt und jetzt funktioniert es wunderbar, DANKE!!!

    Habe aber eine Frage noch, wie kann ich in aktivierte Item nur den ToggleButton deaktivieren?

    <ToggleButton HorizontalAlignment="Left" Grid.Row="1" Content="Im Kalender zeigen" IsChecked="{Binding ShowInCalendar, Mode=TwoWay}" />



    Gruesse, NUNUI

    • Als Antwort markiert Nunui Montag, 24. Februar 2014 17:46
    Montag, 24. Februar 2014 17:26
  • Habe aber eine Frage noch, wie kann ich in aktivierte Item nur den ToggleButton deaktivieren?

    Indem du die IsEnabled-Eigenschaft des ToggleButton bindest, so wie du auch IsChecked gebunden hast.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Nunui Montag, 24. Februar 2014 17:45
    Montag, 24. Februar 2014 17:34

Alle Antworten

  • Montag, 24. Februar 2014 16:42
  • Hallo,
    da du die ComboBox gebunden hast, ist es am einfachsten in jedem Item eine Eigenschaft dafür bereit zu halten:

    public class Owner{
    public bool IsEnabled { get; set; }
    //usw.
    Nun kannst du im XAML einen Style für deine ComboBoxItems anlegen, welcher die IsEnabled-Eigenschaft bindet:
    <ComboBox x:Name="user" Grid.Column="1" Height="60" Width="340" HorizontalAlignment ="left" Margin="20,-35,0,0" 
                        ItemTemplate="{StaticResource OwnerPropertyEditorsTemplate}" ItemsSource="{Binding Owners}" KeyUp="cboSimple_KeyUp1">
        <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            </Style>
        </ComboBox.Resources>
    Du könntest auch die einzelnen Controls im Template deaktivieren, dann müsstest du aber selbst dafür sorgen, dass man diese nicht mehr auswählen kann.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Montag, 24. Februar 2014 16:43
  • Ich habe in Klasse Owner die Eigenschaft IsEnabled hinzugefügt:

    public bool IsEnabled { get; set; }

    Und versuch dann z.B. wie folgt alle Items außer der erste Item zu deaktivieren:

    for (int u = 0; u < user.Items.Count; u++)
    {
        if (u > 0)
            ((Owner)user.Items[u]).IsEnabled = false;
    }

    Aber irgendwie funktioniert es nicht! Oder mache ich etwas falsch?


    Gruesse, NUNUI

    Montag, 24. Februar 2014 17:08
  • Property Changed Implementiert ?
    Montag, 24. Februar 2014 17:22
  • Ich habe jetzt 

    <ComboBox.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            </Style>
        </ComboBox.Resources>

    mit

    <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnabled" Value="{Binding IsEnabled}"/>
            </Style>
        </ComboBox.ItemContainerStyle>

    ersetzt und jetzt funktioniert es wunderbar, DANKE!!!

    Habe aber eine Frage noch, wie kann ich in aktivierte Item nur den ToggleButton deaktivieren?

    <ToggleButton HorizontalAlignment="Left" Grid.Row="1" Content="Im Kalender zeigen" IsChecked="{Binding ShowInCalendar, Mode=TwoWay}" />



    Gruesse, NUNUI

    • Als Antwort markiert Nunui Montag, 24. Februar 2014 17:46
    Montag, 24. Februar 2014 17:26
  • Habe aber eine Frage noch, wie kann ich in aktivierte Item nur den ToggleButton deaktivieren?

    Indem du die IsEnabled-Eigenschaft des ToggleButton bindest, so wie du auch IsChecked gebunden hast.


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Nunui Montag, 24. Februar 2014 17:45
    Montag, 24. Februar 2014 17:34
  • Ups, das stimmt! Jetzt funktioniert es wunderbar, DANKE !!!

    Gruesse, NUNUI

    Montag, 24. Februar 2014 17:47