[英]Selected Item Always deselect (C#)
我正在實現一個列表框,當我在列表框中選擇一個項目時,它會出現在文本塊“ MiniTextBlock”上,但是我想當文本塊文本被手動更改或文本塊文本不等於列表框中的選定項目時,那選定的項目應從列表框中取消選擇。
DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(0.4) };
timer.Tick += delegate (object sender, object e)
{
if(selectedItem != null && selectedItem.ToString() != MiniTextBlock.Text)
{
FavoritesListBox.SelectedIndex = -1;
}
};
timer.Start();
每件事看起來都是正確的,但是即使Textblock文本和所選項目相同,也會取消選擇。
完整的示例代碼
XAML
<StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<TextBlock Name="MiniTextBlock" Text="35" FontSize="50" VerticalAlignment="Top" HorizontalAlignment="Center"/>
<ListBox Name="FavoritesListBox" VerticalAlignment="Center">
<ListBoxItem>
<TextBlock Text="36" FontSize="30"/>
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="35" FontSize="30"/>
</ListBoxItem>
<ListBoxItem>
<TextBlock Text="34" FontSize="30"/>
</ListBoxItem>
</ListBox>
</StackPanel>
C#
public MainPage()
{
this.InitializeComponent();
DispatcherTimer timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(0.4) };
timer.Tick += delegate (object sender, object e)
{
var selectedItem = FavoritesListBox.SelectedItem;
if (selectedItem != null && selectedItem.ToString() != MiniTextBlock.Text)
{
FavoritesListBox.SelectedIndex = -1;
}
};
timer.Start();
}
輸出值
我的猜測是,您可以通過將SelectedIndex
設置為-1
來再次觸發事件 ,結果SelectedItem
現在為null
。 無論如何,在這種情況下,一種快速的解決方案是使用可能的null
保護 if
語句:
var selectedItem = FavoritesListBox.SelectedItem;
if(selectedItem != null && selectedItem.ToString() != MiniTextBLock.Text)
{
FavoritesListBox.SelectedIndex = -1;
}
由於您沒有將源綁定到ListBox
,所以SelectedItem
實際上是一個ListBoxItem
,而不是string
。 您需要向下鑽取並找到實際的文本,如下所示:
timer.Tick += delegate (object sender, object e)
{
var selectedItem = (ListBoxItem)FavoritesListBox.SelectedItem;
if (selectedItem == null)
{
return;
}
var tb = (TextBlock)selectedItem.Content;
if (tb.Text != MiniTextBlock.Text)
{
FavoritesListBox.SelectedIndex = -1;
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.