我有一个带水平滚动的ListBox,每个项目都包含一个两行网格。第一行包含图像,第二行包含用于渲染第一行的边框 (是的,是的。我知道。还有另一次封面尝试......)
我需要一些帮助来确定图像的大小。如果我没有指定任何大小,它将以完整大小渲染图像,但我希望它受到网格行高度的限制。如果窗口调整大小,图像应调整大小。
任何线索?
更新
我现在已经改变了一点代码。首先,我删除了一个不必要的触发器,但重要的部分是
这给了我几乎我想要的东西。我无法找到coverImage和coverReflection之间的差距。任何线索,og可能我应该发一个新问题......?
第二次更新:
我想我现在有一个反思差距的解决方案。但是感觉有点尴尬。我想有更好的方法可以做到。
我做的是 - 我不再翻转边框了,我正在翻转视觉画笔。 - 我为视觉画笔添加了TileMode =“Tile”
现在,我不确定为什么会这样,但它接近我想要的,所以......
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="UntitledProject1.Window1"
x:Name="Window"
Title="Window1"
Width="801" Height="786">
<Window.Resources>
<XmlDataProvider x:Key="dataProvider" XPath="Bilder">
<x:XData>
<Bilder xmlns="">
<Bilde>75760-1_-8589666289339775808.jpg</Bilde>
<Bilde>73255-3_-8589662994232744558.jpg</Bilde>
<Bilde>75760-1_-8589666289339775808.jpg</Bilde>
<Bilde>73255-3_-8589662994232744558.jpg</Bilde>
<Bilde>75760-1_-8589666289339775808.jpg</Bilde>
<Bilde>73255-3_-8589662994232744558.jpg</Bilde>
</Bilder>
</x:XData>
</XmlDataProvider>
<ControlTemplate x:Key="listControlTemplate" TargetType="{x:Type ListBoxItem}">
<Grid x:Name="listItemGrid">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Image x:Name="coverImage"
Source="{Binding Path=InnerText}"
Stretch="Uniform"
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom"
Grid.Row="0"
RenderTransformOrigin="0.5,1">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0.7" ScaleY="0.7"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
<Border x:Name="coverReflection"
RenderTransformOrigin="0.5,0"
Height="{Binding Path=ActualHeight, ElementName=coverImage, Mode= Default}"
VerticalAlignment="Top"
Grid.Row="1"
>
<Border.OpacityMask>
<LinearGradientBrush EndPoint="0.0,1" StartPoint="0.0,0">
<GradientStop Color="#00000000" Offset="0.6"/>
<GradientStop Color="#BBFFFFFF" Offset="0"/>
</LinearGradientBrush>
</Border.OpacityMask>
<Border.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0.7" ScaleY="0.7"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Border.RenderTransform>
<Border.Background>
<VisualBrush Visual="{Binding ElementName=coverImage}" TileMode="Tile">
<VisualBrush.Transform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="-1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</VisualBrush.Transform>
</VisualBrush>
</Border.Background>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="RenderTransform" TargetName="coverImage">
<Setter.Value>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="RenderTransform" TargetName="coverReflection">
<Setter.Value>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1"/>
<SkewTransform AngleX="0" AngleY="0"/>
<RotateTransform Angle="0"/>
<TranslateTransform X="0" Y="0"/>
</TransformGroup>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
<Style TargetType="{x:Type ListBoxItem}" x:Key="listStyle">
<Setter Property="Template" Value="{StaticResource listControlTemplate}" />
</Style>
</Window.Resources>
<Window.BindingGroup>
<BindingGroup/>
</Window.BindingGroup>
<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource dataProvider}, XPath=/Bilder/Bilde}">
<ListBox ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ItemsSource="{Binding }"
IsSynchronizedWithCurrentItem="True"
Background="#FF000000"
ItemContainerStyle="{StaticResource listStyle}"
VerticalAlignment="Stretch"
>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</Window>
答案 0 :(得分:1)
修改ListBoxItem
的样式,以包含绑定到Height
属性的ListBox.ActualHeight
属性的setter:
<Style TargetType="{x:Type ListBoxItem}" x:Key="listStyle">
<Setter Property="Template" Value="{StaticResource listControlTemplate}" />
<Setter Property="Height" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBox}}, Path=ActualHeight}" />
</Style>
这会使您的物品与其容器一样高。从那以后,您可以将控件模板中的Grid绑定到其模板化父级的ActualHeight并调整图像大小。你必须要玩一点才能达到高度差。例如,您可以使用图像在行上方创建行,对于选定的图像,可以使用setter更改其Row和RowSpan属性。