如何从按钮中包含选项卡控件

时间:2014-10-15 21:16:55

标签: c# wpf tabcontrol

我有以下代码块(对于块的道歉)

<Canvas HorizontalAlignment="Left" Height="439" VerticalAlignment="Top" Width="1171" Canvas.Left="10" Canvas.Top="10" Margin="0,0,0,-1" >
    <TabControl Height="419" Canvas.Left="10" Canvas.Top="10" Width="1151">
        <TabItem x:Name="MainTab" Header="Main">
        <Grid>

            <Canvas HorizontalAlignment="Left" Height="100" VerticalAlignment="Top" Width="741" Canvas.Left="55" Canvas.Top="118" Margin="10,91,0,0">
                <Controls:Tile Title="Add Shift" 
                TiltFactor="2"
                Width="100" Height="100" 
                Count="1" Margin="0" Click="TileTabControl">
                </Controls:Tile>

                <Controls:Tile Title="Recorded Shifts" 
                TiltFactor="2"
                Width="136" Height="100" 
                Count="2" Margin="0" Canvas.Left="105">
                </Controls:Tile>

                <Controls:Tile Title="Details Of Pay" 
                TiltFactor="2"
                Width="136" Height="100" 
                Count="3" Margin="0" Canvas.Left="246">
                </Controls:Tile>

                <Controls:Tile Title="Account Settings" 
                TiltFactor="2"
                Width="158" Height="100" 
                Count="4" Margin="0" Canvas.Left="387">
                </Controls:Tile>

                <Controls:Tile Title="View Shifts By Month" 
                TiltFactor="2"
                Width="191" Height="100" 
                Count="5" Margin="0" Canvas.Left="550">
                </Controls:Tile>
            </Canvas>
        </Grid>
        </TabItem>
        <TabItem x:Name="RecordedShifts" Header="Recorded Shifts">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem x:Name="PayDetails" Header="Pay Details">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem x:Name="AccountSettings" Header="Account Settings">
        <Grid Background="#FFE5E5E5"/>
            </TabItem>
        <TabItem x:Name="ShiftsByMonth" Header="Shifts By Month">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem x:Name="NewShift" Header="New Shift ">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
    </TabControl>

</Canvas>

我正在尝试找出一种方法来将信息发送到同一个处理程序,该处理程序将控制选项卡的更改。我有什么

    private void TileTabControl(object sender, RoutedEventArgs e,string U)
    {
        MessageBox.Show(U.ToString()); <!-- Test if U is correctly set-->
    }

通过这种方法,我打算通过以下方式更改选定的标签:

    private void TileTabControl(object sender, RoutedEventArgs e,string U)
    {
        //MessageBox.Show(U.ToString());
        U.IsSelected = true;
    }

然后切换到正确的选项卡。我觉得如果这种方法是可行的,它会最大限度地减少重复的功能空洞,这将有助于切换到不同标签的一个目的。

我试过了:

Count="1" Margin="0" Click="TileTabControl(MainTab)">

返回了:

  

错误1单击=“TileTabControl(test)”无效。   'AddNewShiftTileClick(test)'不是有效的事件处理程序方法名称。   只有生成的或代码隐藏类的实例方法才有效。

我已经研究过google如何按照这些方式做些什么,但是从我发现的是基本的问题,这些问题要求从控件中自动更改选项卡控件,这会产生以下代码片段:

TabControl.Tabs[TabNumber].IsSelected=true;

当尝试修改并包含到我当前的代码集中时,结果无济于事。

有一种基本方法是为每个Tile单击切换选项卡创建一个新的事件处理程序,但我觉得这会给后端C#编码带来凌乱的外观。

我是否可以采用任何不同的方法或方案来最小化重复的事件处理程序以执行单一目的?

1 个答案:

答案 0 :(得分:0)

似乎我已经设法找到了一个解决方法,在进一步添加到选项卡控件之前,我做了以下更改:

 <Controls:Tile Title="Add Shift" 
    TiltFactor="2"
    Width="100" Height="100" 
    Count="1" Margin="0" Tag="NewShift" Click="TileTabControl">
 </Controls:Tile>

添加tag元素后,在sender对象&amp;内添加参数/值。验证如下:

var Type = (Button)sender;
MessageBox.Show(Type.Tag.ToString());

将Sender对象强制转换为按钮,这将允许我获取在tag元素内解析的值,转到字符串&amp;在文本框中打印出来。在数据操作之后,看起来大致如此:

    private void TileTabControl(object sender, RoutedEventArgs e)
    {
        var Tab = (Button)sender;
        //MessageBox.Show(Type.Tag.ToString());
        switch (Tab.Tag.ToString())
        {
            case "NewShift":
                break;
            case "RecordedShifts":
                break;
            case "DetailsOfPay":
                break;
            case "AccountSettings":
                break;
            case "ShiftsByMonth":
                break;
        }
    }