簡體   English   中英

選擇模板控件時,帶有DataTemplate的Wpf列表框不選擇項目

[英]Wpf listbox with DataTemplate not selecting item when template control selected

我有一個帶有數據模板的列表框。 數據模板非常簡單,包含兩個文本框。 如果我在它們周圍的網格上的文本框外單擊,列表框將選擇該行。 如果我在文本框中單擊,文本框將獲得焦點,但列表框不會選擇該行。 我使用Expression Blend繪制模板,如果這有助於解釋一些值,邊距等。

這是數據模板:

<DataTemplate DataType="{x:Type Scratch:CollectionItem}">
        <Grid Height="20" Width="288">
            <TextBox HorizontalAlignment="Left" Margin="8,0,0,0" TextWrapping="Wrap" Text="{Binding Id}" VerticalAlignment="Top" Width="86"/>
            <TextBox Margin="98,0,0,0" TextWrapping="Wrap" Text="{Binding Detail}" VerticalAlignment="Top"/>
        </Grid>
    </DataTemplate>

我想我會添加一個自己的答案來擴展我所學到的東西。 我已經完成了上面鏈接答案中沒有顯示的內容。

所以我有一個DataTemplate:

<DataTemplate DataType="{x:Type Scratch:CollectionItem}">
    <Grid Height="20" Width="288">
    <TextBox HorizontalAlignment="Left" Margin="8,0,0,0" TextWrapping="Wrap" Text="{Binding Id}" VerticalAlignment="Top" Width="86" PreviewMouseDown="APreviewMouseDown" GotFocus="AGotFocus" GotKeyboardFocus="AGotKeyboardFocus" PreviewGotKeyboardFocus="AGotKeyboardFocus"/>
    <TextBox Margin="98,0,0,0" TextWrapping="Wrap" Text="{Binding Detail}" VerticalAlignment="Top" PreviewMouseDown="APreviewMouseDown" GotFocus="AGotFocus" GotKeyboardFocus="AGotKeyboardFocus" PreviewGotKeyboardFocus="AGotKeyboardFocus"/>
</Grid>

所有事件都發生了,我最終選擇了GotFocus。 A *名稱來自我試圖重命名的地方,以查看事件未被解雇的原因。 退出Visual Studio並重新啟動似乎解決了它。 這台機器不太可靠。

如您所見,DataTemplate適用於CollectionItem類型的項目。 我正在嘗試使用INotifyPropertyChanged和Observable集合。 細節並不重要。

我的ListBox綁定到{Binding Path = Items},其中Items是ObservableCollection

我的焦點事件是對另一個線程中找到的解決方案的變體。 因為我的ListBox直接綁定到CollectionItem對象列表,所以以下工作並且看起來比處理模板化父對象更簡潔等。

private void AGotFocus(object sender, RoutedEventArgs e)
{
    try
    {
        FrameworkElement element = sender as FrameworkElement;
        CollectionItem item = element.DataContext as CollectionItem;
        if (item != null)
        {
            listBox2.SelectedValue = item;
        }
    }
    catch { }
}

所以在上面的例子中,sender是兩個TextBox中的一個,它的DataContext指向CollectionItem,我們可以通過選擇該項來設置要選擇的列表框項。

不知道這對任何人都有幫助,但它在那里:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM