2017-01-13 54 views
1

Hello Stackoverflowers!在MainWindow中使用时裁剪的UserControl

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

这里是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> 

我真的不知道为什么我的控制裁剪要诚实。请任何潜在客户?

回答

1

简答:它不适合。

您的主窗口中有两列。由于您没有指定放置UserControl的列,所以它默认为第一列。但是你的Width定义强制该列为第二列大小的四分之一。您的SearchBox根本不适合您分配给它的空间。

如果您从该行的星号(*):

<ColumnDefinition Width="8*" /> 

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

+0

哦对。所以,考虑到你们俩告诉我的情况,我将控制宽度减半,并修改了主窗口第一列相对于第二列的大小(30-70比率)。这比预期的要宽一些,但它会做到这一点。谢谢 – Csi

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> 

这将有意想不到的结果。

+0

哦,我不知道,很好 – Csi