将用户选择的值附加到 ComboBox 中的预设字符串

Appending a user selected value onto a preset string in ComboBox

好的,我认为这是一个快速简单的过程,但我一直在努力寻找解决这个问题的方法。

我想要做的是有一个默认显示 "Rows: (value)" 的下拉菜单。打开下拉菜单时,我希望它仅显示可用值。

这是我的 C# 代码:

private void RowsComboBox_Loaded(object sender, RoutedEventArgs e)
    {

        List<int> data = new List<int>();
        data.Add(2);
        data.Add(3);
        data.Add(4);
        data.Add(5);
        data.Add(6);
        data.Add(7);
        data.Add(8);

        var comboBox = sender as ComboBox;
        comboBox.ItemsSource = data;
        comboBox.SelectedIndex = 0;
}

private void RowsComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var comboBox = sender as ComboBox;
        string value = comboBox.SelectedItem.ToString();
}

XAML:

<ComboBox x:Name="RowsComboBox"  Loaded="RowsComboBox_Loaded" SelectionChanged="RowsComboBox_SelectionChanged"/>

现在我可以更改值,但我只能显示文本或值,但不能同时显示。 我可以做一些变通办法,但这让我很恼火,以至于我想要一个答案只是为了看看它是如何完成的。

您需要使用 ItemTemplates 来执行此操作: 看看:https://meleak.wordpress.com/2012/05/13/different-combobox-itemtemplate-for-dropdown/

它做你想做的事,但方式恰恰相反。

希望对您有所帮助。但请记住,它对于您想要的简单东西来说相当大 :D

我不认为你真的想要 "Rows: " 文本 组合框控件中:

<StackPanel Orientation="Horizontal">
    <Label x:Name="RowsLabel" Content="Rows:"/>
    <ComboBox x:Name="RowsComboBox"/>
</StackPanel>

StackPanel 通过将静态标签 "Rows:" 与您的组合并排放置来完成您想要的。

如果这就是您要找的,请告诉我。

我发现在 ComboBox 中同时显示 "Rows: " 和用户选择的问题可以像 John Castleman 描述的使用 StackPanel

一样解决
<ComboBox x:Name="cbRows" Loaded="Rows_Loaded" SelectionChanged="Rows_SelectionChanged" Width="Auto" Height="Auto" ItemContainerStyle="{StaticResource DropDownItemStyle}">
    <ComboBox.ItemTemplate>
        <DataTemplate >
            <StackPanel Orientation="Horizontal" ToolTipService.ShowOnDisabled="True" Background="Transparent" Margin="0,1.5,0,1.5">
                <TextBlock Text="Rows: " Width="Auto" Height="Auto" Margin="5,0,5,0"/>
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,0" Text="{Binding}"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

如您所见,我还使用了 ItemContainerStyle 来确保下拉菜单在 ComboBox 展开时仅显示可选择的值。我使用的样式是:

<Style TargetType="{x:Type ComboBoxItem}" x:Key="DropDownItemStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBoxItem}">
                <Grid SnapsToDevicePixels="true" Width="Auto" Height="Auto">
                    <Border x:Name="Border" CornerRadius="2,2,2,2">
                        <StackPanel HorizontalAlignment="Stretch" Width="Auto" Height="Auto">
                            <TextBlock Text="{Binding}" HorizontalAlignment="Stretch" Width="Auto" Height="Auto" VerticalAlignment="Center" x:Name="TextBlock"/>
                        </StackPanel>
                    </Border>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsHighlighted" Value="true">
                        <Setter Property="Background" TargetName="Border" Value="#FF3399FF"/>
                        <Setter Property="Foreground" TargetName="TextBlock" Value="White"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>