2012-05-08 41 views
3

我有與我的視圖模型綁定的Listbox。此視圖模型有一個屬性如何使Listbox中的某個項目可見但不可點擊

我需要項目是可見的,但不可點擊此字段的更改。任何建議,任何人

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如名稱與一個文本框。 IsSelected有複選框和IsActive是使ListBoxItems啓用/禁用取決於邏輯 和我的XAML風格loooks像這樣

<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> 
+0

你想要所有的項目是不可點擊的或只是適合基於vm屬性的特定標準的項目嗎?請提供更多的細節,以便我們可以幫助你。 –

+0

只是在特定時間滿足特定條件的一些項目。 –

回答

2

enter image description here

代碼背後:(您使用的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:

​​

希望這個幫助

1

如果你想改變你的風格觸發器的東西,那麼你必須在你的風格中設置這個屬性呢!所以只需將默認的IsEnabled設置器添加到您的樣式中即可。

<Style TargetType="ListBoxItem"> 
    <Setter Property="IsEnabled" Value="True" /><!-- default --> 
    ...from here your stuff 
1

設置IsEnabled woudld的替代方法是使用觸發器來設置UIElement.IsHitTestVisible屬性。

<DataTrigger Binding="{Binding IsActive}" Value="False"> 
    <Setter Property="IsHitTestVisible" Value="False" /> 
</DataTrigger> 
相關問題