在MainWindow中使用时,UserControl会被裁剪

时间:2017-01-13 22:54:47

标签: wpf xaml

你好Stackoverflowers!

我在XAML中创建了一个带有搜索栏的列表,当我尝试在MainWindow.xaml中使用我的新UserControl时,UserControl中的Button在设计器中被裁剪而不是调整大小以适应,为什么是那个?

这是MainWindow.xaml正文:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="2*"/>
        <ColumnDefinition Width="8*" />
    </Grid.ColumnDefinitions>

    <controls:SearchBox Grid.Column="0"/>
</Grid>

这是自定义控件的主体:

    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
        <RowDefinition Height="8*" />
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="8*" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>

    <TextBox 
        Grid.Row="0"
        VerticalAlignment="Center"
        Text="Search"
        TextBlock.FontStyle="Italic"
        TextBlock.TextAlignment="Left"
      />

    <!--   Content="{StaticResource FilterLogo}" -->
    <Button 
        Grid.Column="1"
        Content="Filter"
        VerticalAlignment="Center"
        HorizontalAlignment="Stretch">
    </Button>


    <ListBox 
        Grid.Row="1"
        Grid.ColumnSpan="2"
        ItemsSource="{Binding DataContext}"
        SelectedItem="{Binding DataContext}"
        ScrollViewer.VerticalScrollBarVisibility="Visible">

    </ListBox>

我真的不知道为什么我的控制被裁剪为诚实。请问任何领导?

2 个答案:

答案 0 :(得分:1)

在列和行定义中使用星号时,请使用百分比。像这样:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width=".1*" /> <!-- 10% -->
    <ColumnDefinition Width=".9*" /> <!-- 90% -->
</Grid.ColumnDefinitions>

这是XAML读者根据您的用法解释的:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="8*" /> <!-- 800% -->
    <ColumnDefinition Width="*" /> <!-- 100% -->
</Grid.ColumnDefinitions>

这会产生不良后果。

答案 1 :(得分:1)

简短回答:它不适合。

主窗口中有两列。由于您尚未指定放置UserControl的列,因此默认为第一列。但是您的Width定义强制该列的大小是第二列的四分之一。

您的SearchBox根本不适合您分配给它的空间。

如果从此行中删除星号(*):

    <ColumnDefinition Width="8*" />

......它不会被裁剪而适合。 (或者,您可以将用户控件放在第二列中,或展开主窗口,或缩小UserControl的宽度。)