ListBox

时间:2016-11-17 23:52:49

标签: c# wpf

我遇到了用户控件的问题。我试图让我的自定义用户控件填充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更宽,从而导致出现水平条。除此之外,如果我添加足够的这些元素以使垂直滚动条出现,它会略微覆盖用户控件。

我的问题是,如何让用户控件填充列表框的宽度,两边的指定边距(可能会有所不同),不会出现水平条,也不会被垂直条覆盖酒吧?

2 个答案:

答案 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