XAML WPF将焦点上的文本块更改为组合框,并在失去焦点后返回到文本块

xtfmy6hx  于 2023-11-14  发布在  其他
关注(0)|答案(1)|浏览(106)

我不知道它是否可能,但我一直在搜索互联网,找不到任何东西,甚至远程到我想要的。我做了类似的事情textbox变成textblock时,不集中,以使用TextTrimming=“省略号”属性对文本框不可用。在数据网格上有一个类似的操作。DataGrid有DataGridTemplateColumn,它可以访问CellTemplate和CellEditingTemplate所以对于一个datagrid,我可以有一个在编辑时更改为combobox的textblock。问题是我不想要一个DataGrid,我无法使用用于textbox的相同方法,因为IG textblock无法访问我在textbox的样式数据触发器中使用的属性“Control.Template”。
下面是我使用的文本框样式的示例代码:

<MultiDataTrigger>
  <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding IsKeyboardFocused, RelativeSource={RelativeSource Self}}" Value="false"/>
    <Condition Binding="{Binding IsEnabled, RelativeSource={RelativeSource Self}}" Value="true"/>
  </MultiDataTrigger.Conditions>
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate TargetType="TextBox">
        <TextBlock Text="{TemplateBinding Text}" TextTrimming="CharacterEllipsis"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</MultiDataTrigger>

字符串
我尝试了各种各样的方法,只是为了让它能用不同的属性来工作,但是我对触发器如何工作的知识有限,所以它更多的是猜测和检查不同的东西,没有结果,所以我决定来这里寻求一些帮助。
我需要使用textblock,因为texttrimming属性再次,但在这个速度,我使它成为一个文本框,并给予它一个风格,变成组合框时,重点和一个textblock时,如果可能的话,但似乎愚蠢。

bbuxkriu

bbuxkriu1#

最后我把TextBlock改成了ComboBox,并做了我想做的事情,但在没有聚焦的时候把ComboBox改成了TextBlock。我这样做是因为我不相信TextBlock有“Control.Template”属性,但即使它有,我也有其他关于TextBlock的聚焦问题,所以这种方式效果更好。

<Style x:Key="ComboBoxTest" TargetType="ComboBox">
  <Style.Triggers>
    <MultiDataTrigger>
      <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource Self}}" Value="false"/>
        <Condition Binding="{Binding IsFocused, RelativeSource={RelativeSource Self}}" Value="false"/>
      </MultiDataTrigger.Conditions>
      <MultiDataTrigger.Setters>
        <Setter Property="Control.Template">
          <Setter.Value>
            <ControlTemplate TargetType="ComboBox">
              <Border Background="{Binding Colour}" Width="{Binding Width}" BorderBrush="Transparent" BorderThickness="1" AllowDrop="True">
                <TextBlock Padding="5,0,5,0" Text="{Binding Text}" ToolTip="{Binding Text}" TextTrimming="CharacterEllipsis" VerticalAlignment="Center" Focusable="False"/>
              </Border>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </MultiDataTrigger.Setters>
    </MultiDataTrigger>
  </Style.Triggers>
</Style>

字符串
希望这能帮助其他任何试图实现类似的人!

相关问题