2013-06-08 41 views
6

ListBoxItemsPanelTemplateプロパティをコントロールのDependencyPropertyに基づいて設定する必要があります。 DataTemplateSelectorを使用するにはどうすればよいですか?ここでWpf変更方法リストボックスItemspanelTemplateを使用して、トリガー

<ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <!-- Here I need to replace with either a StackPanel or a wrap panel--> 
    </ItemsPanelTemplate> 
</ListBox.ItemsPanel> 

ItemsPanelTemplate Selector in wpf?同様の質問とのリンクは次のとおりです。

は、私のようなものを持っています。以下は私のコードが、その作業はありません:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

    <Window.Resources> 
     <XmlDataProvider x:Key="myXmlDataBase" XPath="/myXmlData"> 
      <x:XData> 
       <myXmlData xmlns=""> 
        <Item Name = "CoverSheet" SNo="1" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000003.tif"/> 
        <Item Name = "HCFA" SNo="2" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/> 
        <Item Name = "HCFA" SNo="3" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/> 
        <Item Name = "HCFA" SNo="4" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/> 
        <Item Name = "HCFA" SNo="5" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/> 
        <Item Name = "HCFA" SNo="6" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000004.tif"/> 
        <Item Name = "HCFA_CC" SNo="7" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\00000005.tif"/> 
        <Item Name = "FrontPage" SNo="8" Type="GrpBX" Image="C:\Work\00288511851128436163\N12201_0003_003\N12201_0003_003I00.tif"/> 
       </myXmlData> 
      </x:XData> 
     </XmlDataProvider>    
    </Window.Resources> 

    <DockPanel> 
     <ListBox Name="lv" ItemsSource="{Binding Source={StaticResource myXmlDataBase},XPath=Item}" FontSize="12" Background="LightGreen" ItemsPanel="{Binding RelativeSource={RelativeSource Self}, Path=Background}"> 
      <ListBox.Resources>      
       <Style x:Key="ListBoxWrapStyle" TargetType="ListBox"> 
        <Setter Property="ItemsPanel"> 
         <Setter.Value> 
          <ItemsPanelTemplate> 
           <WrapPanel Width="{Binding FrameworkElement.ActualWidth),RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" ItemWidth="{Binding (ListView.View).ItemWidth, RelativeSource={RelativeSource AncestorType=ListView}}" ItemHeight="{Binding (ListView.View).ItemHeight, RelativeSource={RelativeSource AncestorType=ListView}}" /> 
          </ItemsPanelTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 

       <Style x:Key="ListBoxHorizontalStackStyle" TargetType="ListBox"> 
        <Setter Property="ItemsPanel"> 
         <Setter.Value> 
          <ItemsPanelTemplate> 
           <StackPanel Width="{Binding (FrameworkElement.ActualWidth),RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" Orientation="Horizontal" /> 
          </ItemsPanelTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 

       <Style x:Key="ListBoxVerticalStackStyle" TargetType="ListBox"> 
        <Setter Property="ItemsPanel"> 
         <Setter.Value> 
          <ItemsPanelTemplate> 
           <StackPanel Width="{Binding (FrameworkElement.ActualWidth),RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" Orientation="Vertical" /> 
          </ItemsPanelTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListBox.Resources> 

      <ListBox.Style> 
       <Style TargetType="ListBox"> 
        <Style.Triggers> 
         <!-- Your Trigger.. --> 
         <Trigger Property="Background" Value="Green"> 
          <Setter Property="ItemsPanel" Value="{StaticResource ListBoxVerticalStackStyle}"/> 
         </Trigger> 

         <Trigger Property="Background" Value="LightBlue"> 
          <Setter Property="ItemsPanel" Value="{StaticResource ListBoxHorizontalStackStyle}"/> 
         </Trigger> 

         <Trigger Property="Background" Value="LightGreen"> 
          <Setter Property="ItemsPanel" Value="{StaticResource ListBoxWrapStyle}"/> 
         </Trigger> 
         </Style.Triggers> 
       </Style> 
      </ListBox.Style> 

      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Viewbox Stretch="Fill" HorizontalAlignment="Stretch" > 
         <Border BorderThickness="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" DataContext="{Binding}" BorderBrush="IndianRed" Margin="0" Height="Auto"> 
          <DockPanel> 
           <Image 
            DockPanel.Dock="Top" 
            Width="150" Margin="5" 
            HorizontalAlignment="Stretch" 
            VerticalAlignment="Stretch" 
            Height="Auto" x:Name="Myimage" 
            RenderOptions.BitmapScalingMode="HighQuality" Source="{Binding [email protected]}"> 
           </Image> 

           <Grid> 
            <TextBlock Text="{Binding [email protected]}" HorizontalAlignment="Center" FontWeight="Normal" FontSize="13" /> 
           </Grid> 
          </DockPanel> 
         </Border> 
        </Viewbox> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </DockPanel> 
</Window> 

私は」ListBoxVerticalStackStyleを取得しています。このコードを実行する必要があります。

答えて

8

Setter.Valueと予想されるときにエラーを表示しようとすると、Styleが表示されます。ヴィヴの答えは :-(私の場合には動作しませんでした、なぜ私が思っていた

<ListBox Name="lv" 
      Background="LightBlue" 
      FontSize="12" 
      ItemsSource="{Binding Source={StaticResource myXmlDataBase}, 
           XPath=Item}"> 
    <ListBox.Resources> 
    <ItemsPanelTemplate x:Key="ListBoxWrapTemplate"> 
     <WrapPanel Width="{Binding (FrameworkElement.ActualWidth), 
            RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" 
        ItemHeight="{Binding (ListView.View).ItemHeight, 
             RelativeSource={RelativeSource AncestorType=ListView}}" 
        ItemWidth="{Binding (ListView.View).ItemWidth, 
             RelativeSource={RelativeSource AncestorType=ListView}}" /> 
    </ItemsPanelTemplate> 
    <ItemsPanelTemplate x:Key="ListBoxHorizontalStackTemplate">  
     <StackPanel Width="{Binding (FrameworkElement.ActualWidth), 
            RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" 
        Orientation="Horizontal" />  
    </ItemsPanelTemplate> 
    <ItemsPanelTemplate x:Key="ListBoxVerticalStackTemplate"> 
     <StackPanel Width="{Binding (FrameworkElement.ActualWidth), 
            RelativeSource={RelativeSource AncestorType=ScrollContentPresenter}}" 
        Orientation="Vertical" /> 
    </ItemsPanelTemplate> 
    </ListBox.Resources> 
    <ListBox.Style> 
    <Style TargetType="ListBox"> 
     <Style.Triggers> 
     <!-- Your Trigger.. --> 
     <Trigger Property="Background" 
        Value="Green"> 
      <Setter Property="ItemsPanel" 
        Value="{DynamicResource ListBoxVerticalStackTemplate}" /> 
     </Trigger> 
     <Trigger Property="Background" 
        Value="LightBlue"> 
      <Setter Property="ItemsPanel" 
        Value="{DynamicResource ListBoxHorizontalStackTemplate}" /> 
     </Trigger> 
     <Trigger Property="Background" 
        Value="LightGreen"> 
      <Setter Property="ItemsPanel" 
        Value="{DynamicResource ListBoxWrapTemplate}" /> 
     </Trigger> 
     </Style.Triggers> 
    </Style> 
    </ListBox.Style> 
    ... 
+0

おかげでたくさんの完全に罰金働いて、しかも私は** ** ** StaticResourceよりもむしろ** DynamicResourceを変更していると私は時にもう一つの問題で立ち往生しています** ListBoxWrapTemplate **実際には画像はラップされず、Horizo​​ntalScrollバー**で整列されます。** Horizo​​ntalScrollバー**は必要ありませんが、イメージはラップされる必要があります。 – Selva

+0

作業するデザインに修正はありますか?ListBoxWraptemplate ** ??ご案内ください。 〜 – Selva

+0

@Selva 'WrapPanel'の幅では、' Width = "{Binding Path = ActualWidth、RelativeSource = {RelativeSource FindAncestor、AncestorType = {x:Type}を設定しようとすると、リストボックス}}} "' 'WrapPanel'の上で – Viv

1

ここにある:のようなものを試してみてくださいS「のListBoxStyleよりも、S」のItemPanelTemplateとして、あなたのリソースを定義し、あなたは

をソートする必要があります私が間違って何をしたか:!あなたがスタイルのトリガーがどんな効果を持っていません<Listbox.ItemPanel></Listbox.ItemPanel>に1を配置する場合

<Style.Triggers> からItemsPanelTemplateのアパートを定義しないでください

アルノー。

PS:コメントだけに十分な評判...

関連する問題