我们是否必须自动将组合扩展到所选项目?

时间:2016-06-17 17:49:17

标签: c# wpf xaml combobox

感谢这个优秀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 = "&quot;Title 3&quot;"/>
    </x:Array>
</Application.Resources>

该阵列中有154个项目。当我运行应用程序并从列表中选择一个项目时,就会发生这种情况。

之前

Selecting a longer droplist item

如您所见,组合列表比实际组合框宽。但我很好。但是当你选择项目时,之后它看起来像是:

After

组合声明如下:

<ComboBox ItemsSource="{StaticResource SongTitleString}" 
    DisplayMemberPath="ValueString" 
    SelectedValuePath="ValueString" 
    SelectedValue="{Binding SongTitleString}" />

我不希望它是可编辑的。那么有什么方法,当我们从组合中选择一个条目时,它不会扩大实际的组合本身?如果可能,(所以它显示剪辑文本)?

当我使用可编辑的组合时也会发生这种情况。例如:

Update

额外标记信息:

<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;

所以我可能会遵循这个想法,但无法解决这个问题。

谢谢。

调整大小:

Resized

更新为已接受的答案:

<ComboBox.MaxWidth>
    <Binding Path="ActualWidth" 
        ElementName="textWeeklyBibleReading"/>
</ComboBox.MaxWidth>

3 个答案:

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

听起来好像在你的ComboBox上设置Values会更好。

MaximumWidth&lt;或者,无论什么价值适合你的情况。

信息为JSON documentation