感谢这个优秀article我在绑定 a ComboBox
方面取得了良好进展。
但我有一个问题,我不知道这是否可以通过WPF解决。
这是班级:
namespace OCLMEditor
{
/// This class provides us with an object to fill a ComboBox with
/// that can be bound to string fields in the binding object.
public class ComboBoxItemString
{
public string ValueString { get; set; }
}
}
在我的App.XAML文件中,我有以下资源:
<Application.Resources>
<x:Array x:Key="SongTitleString" Type="local:ComboBoxItemString">
<local:ComboBoxItemString ValueString = "Title 1"/>
<local:ComboBoxItemString ValueString = "Title 2"/>
<local:ComboBoxItemString ValueString = ""Title 3""/>
</x:Array>
</Application.Resources>
该阵列中有154个项目。当我运行应用程序并从列表中选择一个项目时,就会发生这种情况。
之前:
如您所见,组合列表比实际组合框宽。但我很好。但是当你选择项目时,之后它看起来像是:
组合声明如下:
<ComboBox ItemsSource="{StaticResource SongTitleString}"
DisplayMemberPath="ValueString"
SelectedValuePath="ValueString"
SelectedValue="{Binding SongTitleString}" />
我不希望它是可编辑的。那么有什么方法,当我们从组合中选择一个条目时,它不会扩大实际的组合本身?如果可能,(所以它显示剪辑文本)?
当我使用可编辑的组合时也会发生这种情况。例如:
额外标记信息:
<GroupBox Grid.Row="1" Margin="5,5,10,5" Background="WhiteSmoke">
<Grid Height="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<StackPanel Grid.Column="0" Margin="5,0,0,0">
<Label>Week of Meeting:</Label>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<ComboBox>
<ComboBoxItem>
<StackPanel Orientation="Horizontal" Margin="0">
<Image Source="special_event.png"></Image>
<Label>Date 1</Label>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem>
<StackPanel Orientation="Horizontal" Margin="0">
<Image Source="special_event.png"></Image>
<Label>Date 2</Label>
</StackPanel>
</ComboBoxItem>
<ComboBoxItem>
<StackPanel Orientation="Horizontal" Margin="0">
<Image Source="special_event.png"></Image>
<Label>Date 3</Label>
</StackPanel>
</ComboBoxItem>
</ComboBox>
<Image Grid.Column="1" HorizontalAlignment="Right" Source="event_time.png" Margin="2"></Image>
</Grid>
<Label>Note:</Label>
<ComboBox IsEditable="True" ItemsSource="{StaticResource NoteString}"
DisplayMemberPath="ValueString"
SelectedValuePath="ValueString"
SelectedValue="{Binding Note}" />
<Label>Bible Reading for Week:</Label>
<TextBox>PSALMS 60-68</TextBox>
<Label>Opening Song:</Label>
<ComboBox ItemsSource="{StaticResource SongTitleString}"
DisplayMemberPath="ValueString"
SelectedValuePath="ValueString"
SelectedValue="{Binding SongTitle}" />
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Vertical" Margin="10,0,10,0">
<Label>Chairman:</Label>
<ComboBox></ComboBox>
<Label>Auxiliary Counsellor 1:</Label>
<ComboBox></ComboBox>
<Label>Auxiliary Counsellor 2:</Label>
<ComboBox></ComboBox>
<Label>Prayer:</Label>
<ComboBox></ComboBox>
</StackPanel>
</Grid>
</GroupBox>
此链接:WPF how to make Grid Reevaluate Max Widths on GridSplitter Column Resize?
有答案:
MaxWidth =“{Binding ElementName = SignalValuesGridSplitter,Path = ActualWidth}” TextWrapping = “总结”/&GT;
所以我可能会遵循这个想法,但无法解决这个问题。
谢谢。
调整大小:
更新为已接受的答案:
<ComboBox.MaxWidth>
<Binding Path="ActualWidth"
ElementName="textWeeklyBibleReading"/>
</ComboBox.MaxWidth>
答案 0 :(得分:1)
可能不完全正在寻找但应该让你走上正确的道路
<GridBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=TaskName}" TextWrapping="Wrap"/>
</DataTemplate>
</GridBox.ItemTemplate>
然后尝试将TextBlock的宽度绑定到另一个有效宽度和元素
宽度=&#34;拉伸&#34;可以工作
答案 1 :(得分:0)
您可以在ComboBox上设置MaxWidth
。如果不知道标记的其余部分,您可以将控件放在Grid
中。这将允许您设置ColumnWidth
,以便我在屏幕截图中看到的其他控件具有相同的宽度。
答案 2 :(得分:0)