我有2個不同的命令叫;每個人都會執行一些操作並顯示一個表單。當他們將Visible
屬性設置爲true
時,我希望他們將焦點設置爲該表單中的第一個文本框。方法執行時將焦點設置爲文本框
我已經看到關於這個主題的各種SO文章,但我似乎無法拼湊在一起。我正在使用MVVM,但所有MVVM解決方案看起來相當廣泛,只是一些QoL改進。我在我的代碼隱藏文件中有一些代碼,所以我認爲我可以把它放在那裏,並有一個更快/更清潔的解決方案,但我可以找到啓動焦點。
我已經搞亂了Focusmanager,但這似乎並沒有給我帶來任何地方。
整個建築的棘手部分如下;
<ListBox Grid.Column="0" Grid.Row="1" Margin="5" IsEnabled="{Binding IsEnabled}" ItemsSource="{Binding DisabledConfigs}" SelectionMode="Extended" SelectedItem="{Binding SelectedConfig}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<cmd:EventToCommand Command="{Binding SelectionChanged}"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding EditConfig}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>
的EditConfig -Command觸發檢查雙擊對象的某些特性的方法,和任一示出了形式或沒有。當它發生時,該表單中的第一個文本框應該得到焦點,否則沒有重要的事情發生。
我一直是這樣愚蠢的生活質量,問題在我的整個上午掙扎了,所以我準備我的左捐腎給誰就給誰分我,我可以清晰地採取方向..
編輯:由AdminSoftDK的建議之後,我嘗試了以下
// Auto-generated
private void nameBoxEdit_IsVisibleChanged(object sender, System.Windows.DependencyPropertyChangedEventArgs e)
{
if (nameBoxEdit.IsVisible)
{
// nameBoxEdit is (quite self-explanatory) the textbox that I want to focus on
nameBoxEdit.Focus();
}
}
我相信這應該是相當接近的解決方案,但它不工作不變。
爲什麼解決方案「按顯示窗口的標籤順序關注第一個UI元素」滿足您的需求? – dymanoid
@dymanoid,因爲它不是一個顯示的窗口,而是一個groupbox,它的'Visible'屬性設置爲false。只有當它被設置爲true(通過雙擊另一個UI元素),它纔會顯示並應該獲得焦點。 – Ciphra
將焦點控制邏輯放入View(* dirty * MVVM)中。 ViewModel可以提供所有必要的事件,它可以通過命令,屬性,如果需要從哪個控件獲取焦點等進行抽象,可以改變它的焦點。 – Sinatr