我想知道如何在标签控件中切换到其他标签。
我有一个主窗口,该主窗口具有与之关联的选项卡控件,它可定向到不同的页面。我想从另一个标签中触发的事件切换到标签。当我尝试使用TabControl.SelectedIndex时,出现错误“访问非静态方法或属性'MainWindow.tabControl'时需要对象引用
这是我的代码,从MainWindow声明TabControl,然后尝试从其他选项卡切换到它。
input
我尝试将其切换为私有静态void并收到相同的错误。
我还尝试了以下代码,创建了MainWindow的实例,并且没有错误,但是当我运行代码时,选定的选项卡在屏幕上没有更改。但是,如果我使用MessageBox查看“选定索引”,那么我将看到更改后的标签“索引”。
<TabControl Name="tabControl" Margin="0,117,0,0" SelectionChanged="tabControl_SelectionChanged" Background="{x:Null}" BorderBrush="Black">
<TabItem x:Name="tabMO" Header="MO" IsTabStop="False">
<Viewbox x:Name="viewMO" Margin="0,0,0,0" Stretch="Fill" StretchDirection="Both">
<local:ManufacturingOrder x:Name="mo" Height="644" Width="1322"/>
</Viewbox>
</TabItem>
<TabItem x:Name="tabOptimize" Header="Optimize" IsTabStop="False">
<Viewbox x:Name="viewOptimize" Margin="0,0,0,0" Stretch="Fill" StretchDirection="Both">
<local:EngineeringOptimization x:Name="Optimize" Height="644" Width="1600"/>
</Viewbox>
</TabItem>
</TabControl>
private void dataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var cellInfo = dataGrid.SelectedCells[0];
var content = (cellInfo.Column.GetCellContent(cellInfo.Item) as TextBlock).Text;
var r = new Regex("[M][0-9]{6}");
if (r.IsMatch(content.ToString()))
{
MainWindow.tabControl.SelectedIndex = 4;
}
}
任何见识都会受到赞赏。
答案 0 :(得分:0)
您的主要问题似乎是,您无法从ManufacturingOrder
或EngineeringOptimization
UserControls中轻松访问MainWindow及其所有子级。这是正常的。有几种解决方法。一个简单的违反了某些MVVM原理的方法(但是无论如何您都在这样做,所以我认为您不会介意)是检索MainWindow
对象的实例:
//Loop through each open window in your current application.
foreach (var Window in App.Current.Windows)
{
//Check if it is the same type as your MainWindow
if (Window.GetType() == typeof(MainWindow))
{
MainWindow mWnd = (MainWindow)Window;
mWnd.tabControl.SelectedIndex = 4;
}
}
一旦检索到MainWindow的运行实例,便可以访问其所有成员。在没有访问您特定的自定义UserControl和实例的情况下,这已尽可能进行了测试。但这是一个非常标准的问题和解决方案。
您的问题的最后一点是正确的,但是您正在创建MainWindow的“新”实例。您必须检索当前正在运行的实例,而不是新实例。