SomePropertyの値が10の場合、コードビハインドなしでリストボックスの最初の項目のマージンを変更したいと思います。これは私がこれまでに持っているものです:
<ListBox x:Class="Windows.CustomList"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Windows"
mc:Ignorable="d" x:Name="MyList"
d:DesignHeight="300" d:DesignWidth="300">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=SomeProperty}" Value="10"/>
<Condition Binding="{Binding Path=Items.Count, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBox}}}" Value="1" />
</MultiDataTrigger.Conditions>
<Setter Property="Margin">
<Setter.Value>
<Thickness Left="500"/>
</Setter.Value>
</Setter>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<local:ListBoxItemCustomTemplate/>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
このアプローチを試してみると、次のようになります。
System.Windows.Dataエラー:4:参照'RelativeSource FindAncestor、AncestorType ='ListBox'、AncestorLevel='1''でバインドするためのソースが見つかりません。BindingExpression:Path = Items.Count; DataItem = null; ターゲット要素は'ListBox'(Name ='');です。ターゲットプロパティは「NoTarget」(タイプ「Object」)です
最初の条件しかない場合は、マージンが適切に適用されます。私が試したもう1つの方法は、ElementNameを使用することでした。
このアプローチではエラーは発生しませんが、機能しません。
どんな助けでも大歓迎です。