XAML 我如何实现一个文本框,显示全名时,没有重点和分裂的名字到名字,中间名和姓氏时,点击WPF C#?

ua4mk5z4  于 12个月前  发布在  C#
关注(0)|答案(2)|浏览(92)

在我的WPF C#应用程序中,我创建了一个显示客户名称的文本框。名称由FirstName,MiddleName和LastName组成。我想实现的是显示全名的文本框(这是三个名字连在一起,被空间分隔)当它不't有一个键盘焦点,并显示3个名字在3个不同的文本框内的全名文本框时,全名文本框得到键盘焦点。实现了控制,但我无法实现的是获取数据,并保存数据更改。
以下是我的数据库日志:

USE [MyDB]
GO
/****** Object:  Table [dbo].[Customers]    Script Date: 12/7/2023 7:57:47 AM ******/
SET ANSI_NULLS ON
GO  
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Customers](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [nvarchar](50) NULL,
    [MiddleName] [nvarchar](50) NULL,
    [LastName] [nvarchar](50) NULL,
 CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Customers] ON 
GO
INSERT [dbo].[Customers] ([ID], [FirstName], [MiddleName], [LastName]) VALUES (1, N'Dees', N'Niis', N'Muus')
GO
INSERT [dbo].[Customers] ([ID], [FirstName], [MiddleName], [LastName]) VALUES (2, N'Jiis', N'Kiss', N'Juss')
GO
INSERT [dbo].[Customers] ([ID], [FirstName], [MiddleName], [LastName]) VALUES (3, N'Nyuus', N'Nyap', N'Kip')
GO
SET IDENTITY_INSERT [dbo].[Customers] OFF
GO

字符串


的数据
And here are the sample codes in github

mccptt67

mccptt671#

以下是你需要做的事情,以使你的示例应用程序工作:
1.将模型对象绑定到ContentControl

<ContentControl Style="{StaticResource MultiTextBox}"
                 materialdesign:HintAssist.Hint="FullName"
                 MinWidth="300"
                 MaxWidth="400"
                 VerticalAlignment="Bottom"
                 Content="{Binding}"/>

字符串
1.将绑定到FullName属性的Mode设置为OneWay

<Trigger Property="IsKeyboardFocusWithin" Value="False">
     <Setter TargetName="dummyTextBox" Property="Text" Value="{Binding Path=FullName, Mode=OneWay}"/>
 </Trigger>


1.在CustomerModelOnChange()方法中引发FullName属性的PropertyChanged事件:

private void OnChange()
 {
     _FullName = FirstName + " " + MiddleName + " " + LastName;
     OnPropertyChanged(nameof(FullName));
 }

8dtrkrch

8dtrkrch2#

你用一个错误的值覆盖了ContentControl中正确的DataContext。这就是为什么你的绑定无法解析。
ContentControl.Content属性的值是全名:

<ContentControl Content="{Binding Path=FullName}" />

字符串
需要知道的重要部分是,ContentControlDataContext继承自Window,因此是CustomerModel示例。
到目前为止一切顺利。但是在ControlTemplate中,您覆盖了继承的DataContext并将其设置为Content属性的值。此值是全名(来自CustomerModel.FullName):

<ControlTemplate x:Key="MultiTextBoxTemplate" TargetType="ContentControl">
  <Grid DataContext="{TemplateBinding Content}">


要使它工作,只需不覆盖(正确的)DataContext

<ControlTemplate x:Key="MultiTextBoxTemplate" TargetType="ContentControl">

  <!-- DataContext is inherited from the Window and is the CustomerModel -->
  <Grid>


现在您的绑定将成功地使用CustomerModel作为绑定源。

相关问题