你好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>
我真的不知道为什么我的控制被裁剪为诚实。请问任何领导?
答案 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的宽度。)