C# WPF - 选定项文本被剪切

Posted

技术标签:

【中文标题】C# WPF - 选定项文本被剪切【英文标题】:C# WPF - Selected Item text is cut 【发布时间】:2021-09-12 11:34:19 【问题描述】:

ComboBox 的 SelectedItem 中的文本被剪切。 在示例中“手动加载”---->>“手动加载” 我尝试在模板中设置 Margin=0 和 Padding=0 (如本主题“https://***.com/questions/48291742/c-sharp-wpf-combobox-selected-item-text-cut-off ") 但没有任何效果

我的组合框

<ComboBox x:Name="cmbLoad" Padding="5,0,0,0" Grid.Column="1" ItemTemplate="StaticResource ResourceKey=Id_Name_Template" SelectionChanged="Cmb_Load_SelectionChanged" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left"/>

我的模板

<DataTemplate  x:Key="Id_Name_Template" >
            <StackPanel >
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition />
                        <ColumnDefinition />
                        <ColumnDefinition />
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Margin="0" Padding="0" VerticalAlignment="Center">
                        <Run FontWeight="Bold" Text="Binding Id"/>
                    </TextBlock >
                    <TextBlock Grid.Column="1" Text="-"  Margin="5,0,5,0"  Padding="0"/>
                    <TextBlock Grid.Column="2" Margin="0" Padding="0" VerticalAlignment="Center" FontStyle="Italic" Text="Binding Name" />
                </Grid>
            </StackPanel>
        </DataTemplate>

结果

【问题讨论】:

【参考方案1】:

去掉StackPanel,设置ColumnDefinitionsWidth

<DataTemplate  x:Key="Id_Name_Template" >
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Margin="0" Padding="0" VerticalAlignment="Center">
             <Run FontWeight="Bold" Text="Binding Id"/>
        </TextBlock >
        <TextBlock Grid.Column="1" Text="-"  Margin="5,0,5,0"  Padding="0"/>
        <TextBlock Grid.Column="2" Margin="0" Padding="0" VerticalAlignment="Center" FontStyle="Italic" Text="Binding Name" />
    </Grid>
</DataTemplate>

【讨论】:

“摆脱 StackPanel” 解决了我 90% 的 WPF 格式问题。【参考方案2】:

您可以改用StackPanel

<DataTemplate  x:Key="Id_Name_Template" >
    <StackPanel Orientation="Horizotnal">
        <TextBlock Text="Binding Id" FontWeight="Bold"/>
        <TextBlock Text=" - "/>
        <TextBlock Text="Binding Name" FontStyle="Italic"/>
    </StackPanel>
</DataTemplate>

或者只是 Runs 在 TextBox 本身:

<DataTemplate x:Key="Id_Name_Template" >
     <TextBlock VerticalAlignment="Center">
          <Run Text="Binding Id" FontWeight="Bold"/><Run Text=" - "/><Run Text="Binding Name" FontStyle="Italic"/>
     </TextBlock>
</DataTemplate>

【讨论】:

以上是关于C# WPF - 选定项文本被剪切的主要内容,如果未能解决你的问题,请参考以下文章

C# 使用 OpenCV 剪切图片中的人物头像

如何从选定的 WPF ComboBox 项 C# 中显示内容

如何使用正则表达式(或 C# 函数)在一个变量中剪切 TEXT MESSAGE 并从此文本中剪切第二个变量 USERNAME?

如何防止 WPF 剪切我的图像?

WPF的DataGrid中如何获取当前被选定的行的第一个单元格的值?

VB中如何在listview添加内容以及删除选定项