TabControl
WPFで、の選択したタブがいつ変更されるかを判断するために使用できるイベントはありますか?
使ってみTabControl.SelectionChanged
ましたが、タブ内の子の選択を変更すると何度も解雇されます。
TabControl
WPFで、の選択したタブがいつ変更されるかを判断するために使用できるイベントはありますか?
使ってみTabControl.SelectionChanged
ましたが、タブ内の子の選択を変更すると何度も解雇されます。
これをハンドラーに結び付けて機能させました:
void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
//do work when tab is changed
}
}
x:Name
プロパティをそれぞれに次のように設定した場合TabItem
:
<TabControl x:Name="MyTab" SelectionChanged="TabControl_SelectionChanged">
<TabItem x:Name="MyTabItem1" Header="One"/>
<TabItem x:Name="MyTabItem2" Header="2"/>
<TabItem x:Name="MyTabItem3" Header="Three"/>
</TabControl>
TabItem
その後、イベントでそれぞれにアクセスできます。
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (MyTabItem1.IsSelected)
// do your stuff
if (MyTabItem2.IsSelected)
// do your stuff
if (MyTabItem3.IsSelected)
// do your stuff
}
If you just want to have an event when a tab is selected, this is the correct way:
<TabControl>
<TabItem Selector.Selected="OnTabSelected" />
<TabItem Selector.Selected="OnTabSelected" />
<TabItem Selector.Selected="OnTabSelected" />
<!-- You can also catch the unselected event -->
<TabItem Selector.Unselected="OnTabUnSelected" />
</TabControl>
And in your code
private void OnTabSelected(object sender, RoutedEventArgs e)
{
var tab = sender as TabItem;
if (tab != null)
{
// this tab is selected!
}
}
そのイベントは引き続き使用できます。送信者引数が実際に関心のあるコントロールであることを確認し、そうであれば、イベント コードを実行します。
生成されたイベントは、処理されるまでバブリングしています。
以下のこのxaml部分は、の変更に関係なく、で選択されたアイテムが変更された後にトリガーui_Tab_Changed
されます。ui_A_Changed
ListView
TabItem
TabControl
<TabControl SelectionChanged="ui_Tab_Changed">
<TabItem>
<ListView SelectionChanged="ui_A_Changed" />
</TabItem>
<TabItem>
<ListView SelectionChanged="ui_B_Changed" />
</TabItem>
</TabControl>
ui_A_Changed
(など)でイベントを消費する必要がありますui_B_Changed
。
private void ui_A_Changed(object sender, SelectionChangedEventArgs e) {
// do what you need to do
...
// then consume the event
e.Handled = true;
}
それが正しい出来事です。正しく配線されていないのではないでしょうか?
<TabControl SelectionChanged="TabControl_SelectionChanged">
<TabItem Header="One"/>
<TabItem Header="2"/>
<TabItem Header="Three"/>
</TabControl>
コードビハインドで....
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
int i = 34;
}
i = 34行にブレークポイントを設定すると、タブに子要素があり、そのうちの1つが選択されている場合でも、タブを変更したときにのみ壊れます。
このコードはうまくいくようです:
private void TabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
TabItem selectedTab = e.AddedItems[0] as TabItem; // Gets selected tab
if (selectedTab.Name == "Tab1")
{
// Do work Tab1
}
else if (selectedTab.Name == "Tab2")
{
// Do work Tab2
}
}
WPF モダン UI を使用している場合、OnTabSelected イベントは使用できませんが、SelectedSourceChanged イベントは使用できます。
このような
<mui:ModernTab Layout="Tab" SelectedSourceChanged="ModernTab_SelectedSourceChanged" Background="Blue" AllowDrop="True" Name="tabcontroller" >
C#コードは
private void ModernTab_SelectedSourceChanged(object sender, SourceEventArgs e)
{
var links = ((ModernTab)sender).Links;
var link = this.tabcontroller.Links.FirstOrDefault(l => l.Source == e.Source);
if (link != null) {
var index = this.tabcontroller.Links.IndexOf(link);
MessageBox.Show(index.ToString());
}
}