我有一个自定义控件,该控件呈现为数据网格(Infragistics)中的单元格。显示所有单元格及其只读模板。可以选择单元(由Infragistics提供)。
现在,如果用户按下“ 3”,则将模板从只读更改为编辑模板。哪个工作正常。
编辑模板包含一个文本框,该文本框之后应具有焦点,并且还可以接收按键,例如。 3.问题是,当我收到按键并更改模板时,它当然还没有呈现。
控制
public class Cell
{
//dependency properties
public DataTemplate ReadOnlyTemplate;
public DataTemplate EditTemplate;
public DataTemplate CurrentTemplate;
OnPreviewKeyDown()
{
CurrentTemplate = EditTemplate;
}
}
XAML中
<Style TargetType="{x:Type local:Cell}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:Cell}">
<Border BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentControl HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{Binding DataContext, RelativeSource={RelativeSource Self}}"
ContentTemplate="{Binding CurrentTemplate, RelativeSource={RelativeSource TemplatedParent}}" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我不能使用OnApplyTemplate
,因为模板是直接在单元格中而是在子级之一中呈现的。
以下是我想解决的一些想法
有人可以指出正确的方向吗?
我结束了以下内容
cell.Dispatcher?.BeginInvoke(DispatcherPriority.Render, new Action(() => OnCellEnteredEditMode(cell)));
private static void OnCellEnteredEditMode(Cell cell)
{
//traverse through the visual tree of the cell down to the first item which I can set to focus to
//use win32 API to send key press
}