我正在创建一个数据绑定的用户控件。查询结果包括对象集合(A),其中A具有其他结果的碰撞(B)。所以A包含多个B。
在用户控件中我想将集合A表示为扩展器,将B表示为扩展器内的按钮。这就是我得到的
<UserControl x:Class="GuideLib.ModuleControls.uclQuestions"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<ItemsControl x:Name="ictlAnswers" ItemsSource="{Binding}" Background="Gray">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander ExpandDirection="Down" Background="DarkGray">
<Expander.Header>
<TextBlock Text="{Binding Path=Name}" Foreground="White"/>
</Expander.Header>
<ListBox x:Name="SubListBox" ItemsSource="{Binding Path=Question}" Background="Gray" Foreground="White" HorizontalAlignment="Stretch">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
<Button Content="{Binding Path=Name}" Margin="10,2,2,2" HorizontalAlignment="Stretch" Tag="{Binding Path=ID}">
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="Gray" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Orange" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我有很多问题。
1:我无法让扩展器中的按钮水平拉伸
2:如何将按钮的Tag属性设置为B
的整个对象3:为什么默认鼠标悬停效果仍然执行。
由于
答案 0 :(得分:0)
只是快速浏览一下......对于问题2,尝试这样做:
<Button Content="{Binding Path=Name}" Margin="10,2,2,2" HorizontalAlignment="Stretch" Tag="{Binding}">
这应该使它绑定到ListBox中的项目。
答案 1 :(得分:0)
好的,请点击:
1。您需要在HorizontalContentAlignment="Stretch"
和ListBox
内StackPanel
集DataTemplate
{/ {}}上设置Orientation="Vertical"
p>
2。在Tag="{Binding .}"
Button
3。将您的Button.Style
更新为:
<Button.Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Background"
Value="Gray" />
<Setter Property="OverridesDefaultStyle"
Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}">
<ContentPresenter />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver"
Value="True">
<Setter Property="Background"
Value="Orange" />
</Trigger>
</Style.Triggers>
</Style>
</Button.Style>
最后在添加问题 4 之前,请记住ListBoxItem
有Style
个问题。因此,如果不在MouseOver
上但在“项目”中完全覆盖对Button
的影响,则必须为Style
提供自定义ListBox.ItemContainerStyle
哦和开始使用 Snoop。它可以帮助您调试布局问题。认为你已经能够解决问题1,因为它会告诉你ContentPresenter
ListBoxItem
使用了所需的宽度而不是拉伸。