我遇到了用户控件的问题。我试图让我的自定义用户控件填充ListBox
宽度,即使使用包含窗口调整ListBox
的大小。
现在,作为WPF的新手(相对来说),我可能做错了。但我试图做的事情如下:
<Window.Resources>
<DataTemplate x:Key="CustomControl">
<StackPanel Orientation="Horizontal">
<uc:CustomControl />
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Name="Container" HorizontalAlignment="Stretch" Margin="5,5,5,5" ItemTemplate="{StaticResource CustomControl}" Padding="0" Grid.IsSharedSizeScope="True" UseLayoutRounding="True" />
</Grid>
用户控件如下所示:
<UserControl x:Class="CustomControll"
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:conv="clr-namespace:DataConverters"
mc:Ignorable="d"
MinHeight="50" MinWidth="250" Background="#FFACA4A4" Margin="0,5,0,5" HorizontalAlignment="Stretch">
<Grid x:Name="CompleteBtn">
<Rectangle HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
<Border BorderBrush="{x:Null}">
<Grid>
<TextBlock></TextBlock>
</Grid>
</Border>
<Image Source="img" MouseDown="CompleteBtn_MouseDown" Cursor="Hand" ToolTip="Complete Task" Margin="0,0,10,0" HorizontalAlignment="Right"/>
</Grid>
问题是,这不会Stretch
填充ListBox
的宽度。
我还尝试在用户控件本身上使用Width="{Binding ElementName=Container, Path=ActualWidth}"
,但如果添加了边距,则会导致元素比ListBox
更宽,从而导致出现水平条。除此之外,如果我添加足够的这些元素以使垂直滚动条出现,它会略微覆盖用户控件。
我的问题是,如何让用户控件填充列表框的宽度,两边的指定边距(可能会有所不同),不会出现水平条,也不会被垂直条覆盖酒吧?
答案 0 :(得分:1)
简单方法:使用水平内容 Alignment =“Stretch” 它应该工作
<Window.Resources>
<DataTemplate x:Key="CustomControl">
<loc:UserControl1 />
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Name="Container"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
Margin="5,5,5,5"
ItemTemplate="{StaticResource CustomControl}"
Padding="0"
Grid.IsSharedSizeScope="True"
UseLayoutRounding="True" />
</Grid>
让我知道它是否无效。
答案 1 :(得分:0)
<DataTemplate x:Key="CustomControl">
<Grid>
<uc:CustomControl />
<Grid>
</DataTemplate>
在Grid
StackPanel
代替DataTemplate