C# 在代码隐藏中使用Textblox样式从DataGridTextColumn获取文本

C# 在代码隐藏中使用Textblox样式从DataGridTextColumn获取文本,c#,wpf,datagridtextcolumn,C#,Wpf,Datagridtextcolumn,我目前正在支持一个项目,我收到一份工作,更改datagridcell上的验证,使他们插入的文本块的输入仅为50个字符 现在,我已经获取了datagrid gotfocus()事件,并检查了每个DataGridTextColumn的标题,如果正确的一个获得了焦点,我将为该列创建一个Key_Down事件 在Key_Down事件中,我希望测试当前字符串的长度,如果长度超过50,我希望文本框不再添加到字符串中。但我的问题是,我没有从DataGridTextColumn获取文本。这是我的密码: XAML

我目前正在支持一个项目,我收到一份工作,更改datagridcell上的验证,使他们插入的文本块的输入仅为50个字符

现在,我已经获取了datagrid gotfocus()事件,并检查了每个DataGridTextColumn的标题,如果正确的一个获得了焦点,我将为该列创建一个Key_Down事件

在Key_Down事件中,我希望测试当前字符串的长度,如果长度超过50,我希望文本框不再添加到字符串中。但我的问题是,我没有从DataGridTextColumn获取文本。这是我的密码:

XAML

<DataGrid Grid.Column="3" GotFocus="transitRouteParticularsGrid_GotFocus" AutoGenerateColumns="False" x:Name="transitRouteParticularsGrid" Grid.ColumnSpan="9" Grid.Row="30" Grid.RowSpan="6" CanUserResizeColumns="False" CanUserSortColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False">

<DataGridTextColumn x:Name="cmbDestination" Header="Destination" EditingElementStyle="{StaticResource errorStyle}" Width="200" Binding="{Binding CustomDestination, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">                        
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="{x:Type TextBlock}">
                                <Setter Property="TextAlignment" Value="Center" />

                            </Style>
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>

   </DataGrid>
图像

所以我需要知道如何获取我为本专栏输入的文本

任何帮助都会很棒:)


谢谢。

您可以使用
DataGridCell.Content
属性获取单元格的可视化树,导航该属性取决于
EditingElementStyle=“{StaticResource errorStyle}”中定义的errorStyle模板。

假设它基于
TextBox
,下面是获取TextBox的方法

TextBox cellTextbox = (TextBox)griddestination.Content;
现在,您可以使用相同的方法获取文本值或进行操作

仅当单元格处于编辑模式时,上述内容才起作用,否则单元格内容为ElementStyle定义的文本块

为了安全起见,你可以写的和

TextBox cellTextbox = griddestination.Content as TextBox;
if(cellTextbox != null)
{
   //your logic
}
TextBox cellTextbox = griddestination.Content as TextBox;
if(cellTextbox != null)
{
   //your logic
}