我有一個帶有作爲文本框和項目按鈕(添加)的項目模板的列表框。無論何時單擊按鈕,都會添加一個項目(文本框)。一旦點擊了按鈕,我想將焦點放在第一個文本框或最近添加的文本框上。我怎樣才能做到這一點在WPF.If可能從MVVM結束與可驗證的方式WPF專注於帶控制模板的列表框項目
1
A
回答
3
我完全同意丹尼爾的回答,但讓我用一些代碼澄清這個想法。首先讓我們定義附加的行爲,對「真」值做出反應併爲其所有者設置焦點。
public static class FocusBehaviour
{
public static bool GetForceFocus(DependencyObject d)
{
return (bool)d.GetValue(FocusBehaviour.ForceFocusProperty);
}
public static void SetForceFocus(DependencyObject d, bool val)
{
d.SetValue(FocusBehaviour.ForceFocusProperty, val);
}
public static readonly DependencyProperty ForceFocusProperty =
DependencyProperty.RegisterAttached("ForceFocus",
typeof(bool),
typeof(FocusBehaviour),
new FrameworkPropertyMetadata(false,
FrameworkPropertyMetadataOptions.None,
(d, e) =>
{
if((bool)e.NewValue)
{
if (d is UIElement)
{
((UIElement)d).Focus();
}
}
}));
}
然後添加這種行爲對我們的文本框:
<DataTemplate>
<TextBox self:FocusBehaviour.ForceFocus="{Binding IsFocused}"/>
</DataTemplate>
當然,你應該IsFocused屬性添加到您的項目類:
public class Item : ObservableObject
{
//...
private bool _isFocused = true;
public bool IsFocused
{
get
{
return this._isFocused;
}
set
{
this._isFocused = value;
this.OnPropertyChanged("IsFocused");
}
}
}
和地方在你的代碼,你應該與操縱IsFocused屬性爲您的項目。 例如,添加新項目時,應重置所有項目的IsFocused,但新手除外。初始化集合時,應僅爲第一項設置IsFocused。
+0
這真的幫了我,但我不得不添加一個while循環來使用VisualTreeHelper找到第一個具有Focusable == true的父項, – 2011-12-27 15:39:59
2
我會做這樣的:
- 在你的虛擬機,與該項目一
ObservableCollection
。 - 在您的VM中,有一個屬性
SelectedItem
。 - 在你的VM中,有一個命令
AddItem
。 - 將按鈕連接到命令
AddItem
。 - 將您的
ComboBox
的SelectedItem
綁定到您的虛擬機的SelectedItem
。 - 在
AddItem
命令中,將該項添加到ObservableCollection
並將其分配給您的VM的SelectedItem
。 - 在您的DataTemplate中,確保文本框在選擇該項目時獲得焦點。
爲了達到最後一點,您可以創建一個附加屬性,該屬性在獲取方中返回IsFocused
,並在設置方中調用Focus
。然後,您可以將此屬性附加到文本框並將其綁定到項目中的IsFocused
屬性。
相關問題
- 1. wpf datagrid專注於選擇項目
- 2. WPF TreeView專注於新增項目
- 3. 列表框項目模板
- 4. WPF:列表框項目模板標記導航項目
- 5. 專注於列表視圖控件的第一個元素WPF
- 6. 列表框項目模板取決於項目值
- 7. 專注於特定的中繼器控制項目
- 8. WPF鼠標綁定的列表框項目模板不一致
- 9. 列表框中的WPF(XAML)綁定項目模板
- 10. 專注於用戶控制
- 11. 帶自定義項目模板文本的wpf組合框
- 12. 帶WPF組合框的多列項目
- 13. WPF列表中每個項目的不同項目模板?
- 14. 與模板WPF列表框項目分組
- 15. 在WPF列表框項目模板中捕獲事件
- 16. 設置用戶控件內的列表框的項目模板
- 17. 帶有項目寬度的列表框控制寬度
- 18. Silverlight:更新列表框模板項目
- 19. 列表框項目模板佈局
- 20. 有一個列表框項目模板
- 21. WPF始終專注於文本框
- 22. 專注於列表框中的最後一項
- 23. 專注於未選中的列表視圖項目
- 24. 列表框項目在選擇後保持專注
- 25. WPF控制模板不適用於呈現的第一項
- 26. 帶模板的類模板專業化
- 27. Vaadin - ListSelect - 專注於選定的項目?
- 28. 小項目模板列表
- 29. 小項目列表模板
- 30. 列表項目模板Django
你可以在這裏發佈相關的xaml代碼嗎?這將很容易找出你的代碼.. – 2011-04-07 06:39:47