gpt4 book ai didi

Wpf 如何使用触发器更改列表框 ItemspanelTemplate

转载 作者:行者123 更新时间:2023-12-04 10:53:01 25 4
gpt4 key购买 nike

我需要设置 ItemsPanelTemplate ListBox 的属性基于 DependencyProperty在控件上。我如何使用 DataTemplateSelector要做到这一点?

我有类似的东西:

<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 XPath=@Image}">
</Image>

<Grid>
<TextBlock Text="{Binding XPath=@SNo}" HorizontalAlignment="Center" FontWeight="Normal" FontSize="13" />
</Grid>
</DockPanel>
</Border>
</Viewbox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
</Window>

运行此代码时,我收到 ListBoxVerticalStackStyle '只要。

最佳答案

正如错误所说,您试图设置 Style当它期待 ItemsPanelTemplateSetter.Value .将您的资源定义为 ItemPanelTemplateListBox 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>
...

关于Wpf 如何使用触发器更改列表框 ItemspanelTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16997387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com