2011-01-06 16 views
1

我想創建一個原型,用戶可以通過選擇菜單項來顯示或顯示項目。我需要刪除項目/摺疊,因爲我需要WrapPanel中其他項目的空白空間。 wrapPanel中的內容是使用XMLDataProvider動態生成的。我試圖爲菜單項分配命令,但無法使其工作。如何從WrapPanel中刪除或添加項目?

XAML:

<Grid Margin="20"> 
    <Menu x:Name="Manage_Menu" HorizontalAlignment="Left" Background="{x:Null}" ScrollViewer.VerticalScrollBarVisibility="Auto" Foreground="#FF2A2A2A" Margin="0,0,0,5" > 
     <MenuItem Header="Show/Hide"> 
        <MenuItem Header="1" Command="{x:Static local:MainWindow.FirstThumbVisibilityWindowCommand}" IsCheckable="true" IsChecked="True"/> 
        <MenuItem Header="2" Command="{x:Static local:MainWindow.FirstThumbVisibilityWindowCommand}" IsCheckable="true" /> 
        <MenuItem Header="3" Command="{x:Static local:MainWindow.FirstThumbVisibilityWindowCommand}" IsCheckable="true" /> 
        <MenuItem Header="4" Command="{x:Static local:MainWindow.FirstThumbVisibilityWindowCommand}" IsCheckable="true" /> 
        <MenuItem Header="5" Command="{x:Static local:MainWindow.FirstThumbVisibilityWindowCommand}" IsCheckable="true" /> 
     </MenuItem> 
    </Menu> 
    <Frame Content="Frame" Source="../tiles.xaml" NavigationUIVisibility="Hidden" /> 
</Grid> 

我希望有人能夠幫助。 整體解決方案可從這裏:

http://cid-0c29483cf3a6a14d.office.live.com/self.aspx/WPF%5E_Tests/DragDropWrapPanel%5E_3.rar

請看一看。你會發現左上角的菜單應該用來隱藏/顯示wrapPanel中的項目。 預先感謝您。從包裹面板中添加或刪除項目

+0

只是一個供參考 - 人們不太可能下載和調試您的項目。相反,你需要用適當的代碼片段形成一個詳細的問題,並提供足夠的關於你想要做什麼的具體信息。你更有可能得到適合你問題的答案。 – 2011-01-10 18:45:21

回答

3

的一種方法是使用帶有ItemsPanel一個列表框設置爲一個WrapPanel

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel /> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 

綁定列表框到一個ObservableCollection,然後添加並從綁定刪除您的視圖模型採集。

+0

如果他們不希望Selection支持可能`ItemsControl`而不是`ListBox`。 – user7116 2011-01-06 22:59:32

+0

ItemsControl適用於不選擇魔杖或ListBox可以樣式化以不顯示任何選擇效果。 – 2011-01-07 04:00:25

+0

我已經鏈接到的解決方案是以這種方式構建的,但仍然無法使其工作。 – vladc77 2011-01-10 18:34:44

3

以下是更改代碼中WrapPanel項目可見性的示例。

一些樣品XAML:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 
    <StackPanel Grid.Row="0" Orientation="Horizontal"> 
     <Button Content="0" Click="Button_Click"/> 
     <Button Content="1" Click="Button_Click"/> 
     <Button Content="2" Click="Button_Click"/> 
    </StackPanel> 
    <WrapPanel Grid.Row="1" x:Name="wrapPanel"> 
     <Rectangle Fill="Red" Width="100" Height="100"/> 
     <Rectangle Fill="Green" Width="100" Height="100"/> 
     <Rectangle Fill="Blue" Width="100" Height="100"/> 
    </WrapPanel> 
</Grid> 

和按鈕事件處理程序:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    int index = int.Parse((string)((sender as Button).Content)); 
    var child = this.wrapPanel.Children[index]; 
    child.Visibility = child.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible; 
} 

剛剛切換相應按鈕上的文字孩子的可見性。

1

這是一個快速n-dirty的版本,只有XAML。它使用內置的BooleanToVisibilityConverter和Element綁定。

<Window x:Class="WrapPanelHideItems.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="WrapPanelHideItems" Height="300" Width="300"> 

    <Window.Resources> 
     <BooleanToVisibilityConverter x:Key="boolToVis" /> 
    </Window.Resources> 

    <StackPanel> 
     <Menu> 
      <MenuItem Header="Show/Hide"> 
       <MenuItem x:Name="mnuItemOne" 
          IsCheckable="True" 
          IsChecked="True" 
          Header="Show Item One" /> 
       <MenuItem x:Name="mnuItemTwo" 
          IsCheckable="True" 
          IsChecked="True" 
          Header="Show Item Two" /> 
       <MenuItem x:Name="mnuItemThree" 
          IsCheckable="True" 
          IsChecked="True" 
          Header="Show Item Three" /> 
       <MenuItem x:Name="mnuItemFour" 
          IsCheckable="True" 
          IsChecked="True" 
          Header="Show Item Four" /> 
       <MenuItem x:Name="mnuItemFive" 
          IsCheckable="True" 
          IsChecked="True" 
          Header="Show Item Five" /> 
      </MenuItem> 
     </Menu> 

     <WrapPanel Orientation="Horizontal" 
        HorizontalAlignment="Stretch" 
        VerticalAlignment="Stretch" 
        Background="Gray"> 
      <TextBlock Text="Item One" 
         Margin="5" 
         FontSize="25" 
         Foreground="Red" 
         Visibility="{Binding ElementName=mnuItemOne, Path=IsChecked, 
              Converter={StaticResource boolToVis}}"/> 
      <TextBlock Text="Item Two" 
         Margin="5" 
         FontSize="25" 
         Foreground="Blue" 
         Visibility="{Binding ElementName=mnuItemTwo, Path=IsChecked, 
              Converter={StaticResource boolToVis}}"/> 
      <TextBlock Text="Item Three" 
         Margin="5" 
         FontSize="25" 
         Foreground="Green" 
         Visibility="{Binding ElementName=mnuItemThree, Path=IsChecked, 
              Converter={StaticResource boolToVis}}"/> 
      <TextBlock Text="Item Four" 
         Margin="5" 
         FontSize="25" 
         Foreground="Yellow" 
         Visibility="{Binding ElementName=mnuItemFour, Path=IsChecked, 
              Converter={StaticResource boolToVis}}"/> 
      <TextBlock Text="Item Five" 
         Margin="5" 
         FontSize="25" 
         Foreground="Violet" 
         Visibility="{Binding ElementName=mnuItemFive, Path=IsChecked, 
              Converter={StaticResource boolToVis}}"/> 
     </WrapPanel> 
    </StackPanel> 
</Window> 

當然,在現實世界的應用程序,你想使用的東西像樣式和數據綁定也許,但是這表明你不必是複雜的得到你想要的結果。簡單通常更好。

相關問題