gpt4 book ai didi

c# - 样式 WPF/MVVM 上的 ControlTemplate

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:37 26 4
gpt4 key购买 nike

我正在尝试弄清楚如何为我的 UserControl 中的所有文本框定义一个 ControlTemplate,我尝试了几种方法但似乎没有用。

我需要的是将 KeyBinding 绑定(bind)到命令:

<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding SaveConfigCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBox}}"/>
</TextBox.InputBindings>

到目前为止,这是有效的,但将相同的代码段添加到所有文本框并不是一个好的做法。所以我试着把它放在样式上,但我得到了 NullReferenceException

<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid>
<TextBox Text="{TemplateBinding}"/>
<ContentPresenter>
<ContentPresenter.InputBindings>
<KeyBinding Key="Enter" Command="{Binding SaveConfigCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBox}}"/>
</ContentPresenter.InputBindings>
</ContentPresenter>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>

有什么想法吗?提前致谢!

编辑以供将来引用:尽管答案是正确的,但我想指出的是,当您已经在控件中绑定(bind)了 Text 属性时,TemplateBinding Text 是不够的,因为 TemplateBinding 是只有一个 OneWay 绑定(bind),你必须使用以下内容:

Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}"

最佳答案

TemplateBinding 用于绑定(bind)到模板定义中的控件属性。进一步将您的 InputBindings 放入 TextBox。

<Style x:Key="tbxStyle" TargetType="TextBox">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TextBox">
<Grid>
<TextBox Text="{TemplateBinding Text}">
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding SaveConfigCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=TextBox}}"/>
</TextBox.InputBindings>
</TextBox>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

<TextBox Text="{Binding SelectedItem}" Style="{StaticResource tbxStyle}">

关于c# - 样式 WPF/MVVM 上的 ControlTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48564224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com