3

ビューモデルにバインドされているリストボックスがあります。このビューモデルにはプロパティがあります

アイテムを表示する必要がありますが、このフィールドを変更するとクリックできなくなります。誰か提案

public interface IRegionAreaDM 
{

    /// <summary>
    /// Name of the Focus Area
    /// </summary>
    string RegionAreaName { get; set; }

    /// <summary>
    /// Determines if the Tab is currently selected.
    /// </summary>
    bool IsSelected { get; set; }

    /// <summary>
    /// Determines if the Tab is linked to any other Tab
    /// </summary>
    bool IsLinked { get; set; }

    /// <summary>
    ///
    /// </summary>
    bool IsActive { get; set; }

}

各アイテムは、XAMLのアイテムに接続されています(例:テキストボックス付きの名前)。チェックボックスとIsActiveを使用したIsSelectedは、ロジックに応じてListBoxItemsを有効/無効にすることであり、Xamlスタイルは次のようになります。

 <Style TargetType="ListBoxItem">
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="ListBoxItem">
            <Border x:Name="Bd" HorizontalAlignment="Stretch" Background="#00D05252"
                    BorderThickness="0,1" SnapsToDevicePixels="true">
              <!--  <StackPanel x:Name="ParamterRoot" Orientation="Horizontal">  -->
              <Grid x:Name="ParamterRoot">
                <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="Auto" />
                  <ColumnDefinition Width="*" />
                  <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <CheckBox x:Name="ParametersCheckbox" Grid.Column="0" Margin="10,0,0,0"
                          VerticalAlignment="Center" IsChecked="{Binding IsSelected}"
                <TextBlock Grid.Column="1" Width="Auto" Margin="20,7.5,0,7.5"
                           Text="{Binding RegionAreaName}" TextTrimming="CharacterEllipsis">
                  <TextBlock.Style>
                    <Style TargetType="{x:Type TextBlock}">
                      <Style.Triggers>
                        <Trigger Property="IsMouseDirectlyOver" Value="True">
                          <Setter Property="Cursor" Value="Hand" />
                        </Trigger>
                      </Style.Triggers>
                    </Style>
                  </TextBlock.Style>
                </TextBlock>                   
              </Grid>
              <!--  </StackPanel>  -->
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsMouseOver" Value="true">
                <Setter TargetName="Bd" Property="Background" Value="#FFC10000" />
              </Trigger>
              <Trigger Property="IsSelected" Value="true">
                <Setter TargetName="Bd" Property="Background" Value="#FFC10000" />
              </Trigger>
 <DataTrigger Binding="{Binding IsActive}" Value="False">
                                    <Setter Property="IsEnabled" Value="False" />
                                </DataTrigger>

            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
4

3 に答える 3

2

ここに画像の説明を入力してください

コードビハインド:(MVVMを使用しているため、このコードを少し調整しますが、パターンに合わせて調整します)

public partial class Window1 : Window
{
    public List<T> Items { get; set; }
    public Window1()
    {
        Items = new List<T>
                    {
                        new T{  Id = 1,Name = "qwe",IsEnabled = true},
                        new T{  Id = 2,Name = "asd",IsEnabled = false},
                        new T{  Id = 3,Name = "zxc",IsEnabled = true},
                        new T{  Id = 4,Name = "rty",IsEnabled = false},
                    };
        InitializeComponent();            
        DataContext = this;
    }
}

public class T
{
    public int Id { get; set; }
    public String Name { get; set; }
    public bool IsEnabled { get; set; }
}

XAML:

<ListBox Name="listBox1" ItemsSource="{Binding Items}" DisplayMemberPath="Name">
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="IsEnabled" Value="{Binding IsEnabled,Mode=TwoWay}" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

この助けを願っています

于 2012-05-08T05:46:37.193 に答える
1

スタイルトリガーで何かを変更したい場合は、このプロパティもスタイルに設定する必要があります。したがって、デフォルトのIsEnabledセッターをスタイルに追加するだけです。

<Style TargetType="ListBoxItem">
   <Setter Property="IsEnabled" Value="True" /><!-- default -->
   ...from here your stuff
于 2012-05-08T06:11:36.697 に答える
1

IsEnabledを設定する代わりに、トリガーを使用してUIElement.IsHitTestVisibleプロパティを設定することもできます。

 <DataTrigger Binding="{Binding IsActive}" Value="False"> 
    <Setter Property="IsHitTestVisible" Value="False" /> 
 </DataTrigger> 
于 2012-05-08T23:49:09.703 に答える