2011-02-25 68 views
1
<StackPanel Grid.Column="0" > 
      <Button Name="buttonEditListBoxItem" Content="Edit" Click="buttonEditListBoxItem_Click"></Button> 
      <ListBox Name="ListBoxTriggers" 
       SelectedValuePath="TriggerId" 
       IsSynchronizedWithCurrentItem="True" 
       SelectionChanged="Triggers_SelectionChanged" 
       ScrollViewer.HorizontalScrollBarVisibility="Auto" 
       HorizontalContentAlignment="Stretch"> 
      <ListBox.ItemTemplate> 
       <DataTemplate><Grid > 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="AUTO"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <CheckBox Grid.Column="0" VerticalAlignment="Center" x:Name="checkBoxTriggers" ></CheckBox> 
          <Button Grid.Column="1" Style="{StaticResource GlassButton}" 
          Uid="{Binding Path=TriggerId}" 
          Margin="5" 
          x:Name="ButtonTrigger" 
          GotFocus="ButtonTrigger_GotFocus" 
          > 
           <Button.Content> 
            <TextBlock Foreground="White" TextAlignment="Justify" 
             TextWrapping="Wrap" Margin="6" Text="{Binding Path=Name}"/> 
           </Button.Content> 
          </Button> 
         </Grid> 
        </DataTemplate> 
       </ListBox.ItemTemplate></ListBox> 

      </StackPanel> 

我想创建一个包含按钮和复选框的数据模板的列表框。当我的编辑按钮,这些复选框都应该得到看得见点击,当我点击它,我再次想使这些复选框看不见什么,我想要做的就是/折叠将复选框添加到wpf列表框中以进行多项选择

答:我已经改变了代码,现在这样:`

</Window.Resources> <StackPanel Grid.Column="0" > 
      <ToggleButton Name="buttonEditListBoxItem" 
          Content="Edit" 
          IsChecked="False" 
          Click="buttonEditListBoxItem_Click"></ToggleButton> 
      <ListBox Name="ListBoxTriggers" 
       SelectedValuePath="TriggerId" 
       IsSynchronizedWithCurrentItem="True" 
       SelectionChanged="Triggers_SelectionChanged" 
       ScrollViewer.HorizontalScrollBarVisibility="Auto" 
       HorizontalContentAlignment="Stretch"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> <Grid > 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="AUTO"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <CheckBox Visibility="{Binding ElementName=buttonEditListBoxItem, Path=IsChecked, Converter={StaticResource visibilityConverter}}" Grid.Column="0" VerticalAlignment="Center" x:Name="checkBoxTriggers" ></CheckBox> 
          <Button Grid.Column="1" Style="{StaticResource GlassButton}" 
          Uid="{Binding Path=TriggerId}" 
          Margin="5" 
          x:Name="ButtonTrigger" 
          GotFocus="ButtonTrigger_GotFocus" 
          > 
           <Button.Content> 
            <TextBlock Foreground="White" TextAlignment="Justify" 
             TextWrapping="Wrap" Margin="6" Text="{Binding Path=Name}"/> 
           </Button.Content> 
          </Button> 
         </Grid> 
        </DataTemplate> </ListBox.ItemTemplate> 
     </ListBox>` `public class VisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((Boolean)value) ? Visibility.Visible : Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (((Visibility)value) == Visibility.Visible); 
    } 
}` 

回答

1

以实现最简单的方法是使用一个切换按钮

例如:

<ToggleButton Name="Toggler"> 
</ToggleButton> 
<StackPanel Visibility="{Binding ElementName=Toggler, Path=Checked, Converter={StaticResource booleanToVisibilityConverter}}"> 
<!-- in here you can place the checkboxes--> 
</StackPanel> 

你只需要创建从布尔值转换为枚举能见度

另一个valueconverter可能性是将一个“Popup”元素与一个ToggleButton结合使用(它给出了一个弹出来编辑该项目的小助手的感觉,并且如果设置了StaysOpen =“False”,则在丢失f时立即关闭ocus) 如果您使用这种方法,您不必压制编辑按钮来隐藏复选框

+0

感谢您的回答。我添加了一个ToggleButton,并使用其可见性转换器的IsChecked属性来决定复选框的可见性。 – batrulz 2011-02-25 20:08:06

+0

想问一个后续问题....如果我必须使用这个作为一个控件,并使用属性buttonEditListBoxItem.isVisible = false ....我将它转换成一个用户控件/自定义控件,以便我可以使用它在任何窗口 – batrulz 2011-02-25 20:23:42

1

如何使用ToggleButton代替ButtonVisibilityConverter

<ListBox Name="ListBoxTriggers" 
      SelectedValuePath="TriggerId" 
      IsSynchronizedWithCurrentItem="True" 
      SelectionChanged="Triggers_SelectionChanged" 
      ScrollViewer.HorizontalScrollBarVisibility="Auto" 
      HorizontalContentAlignment="Stretch"> 
    <ListBox.Resources> 
     <local:VisibilityConverter x:Key="VisibilityConverter" /> 
    </ListBox.Resources> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="AUTO" /> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <CheckBox Grid.Column="0" 
          VerticalAlignment="Center" 
          x:Name="checkBoxTriggers" 
          Visibility="{Binding ElementName=ButtonTrigger, Path=IsChecked, Converter={StaticResource VisibilityConverter}}"></CheckBox> 
       <ToggleButton Grid.Column="1" 
           Uid="{Binding Path=TriggerId}" 
           Margin="5" 
           x:Name="ButtonTrigger" 
           GotFocus="ButtonTrigger_GotFocus"> 
        <ToggleButton.Content> 
         <TextBlock Foreground="White" 
            TextAlignment="Justify" 
            TextWrapping="Wrap" 
            Margin="6" 
            Text="{Binding Path=Name}" /> 
        </ToggleButton.Content> 
       </ToggleButton> 
      </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

VisibilityConverter:

public class VisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return ((Boolean)value) ? Visibility.Visible : Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (((Visibility)value) == Visibility.Visible); 
    } 
} 
+0

感谢您的回答。我添加了一个ToggleButton,并使用其可见性转换器的IsChecked属性来决定复选框的可见性。 – batrulz 2011-02-25 20:08:25

+0

我不想让模板内的按钮决定我的复选框的可见性。在列表框外有一个编辑按钮,我想根据它来决定。谢谢虽然你的答案确实有帮助。 – batrulz 2011-02-25 20:14:15

相关问题