2014-10-15 2 views
0

У меня есть следующий код чанка (Извинения для блока)Как содержать вкладки из кнопок

<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 (тест)" не является действительным. 'AddNewShiftTileClick (test)' не является допустимым именем метода обработчика события. Действительны только методы экземпляров в сгенерированном или закодированном классе.

Я исследовал в Google о том, как сделать что-то вдоль этих линий, но от того, что я обнаружил это основные вопросы, которые задают о смене вкладок из-под контроля это сам, который производит в большом количестве фрагменты кода вдоль линии:

TabControl.Tabs[TabNumber].IsSelected=true; 

Который при попытке изменить и включить в мой текущий набор кодов оказался безрезультатным.

Существует базовый подход, который заключается в создании нового обработчика событий для каждого щелчка, чтобы переключать вкладки, но я чувствую, что это вызовет грязный взгляд на кодирование на языке C#.

Есть ли какой-либо другой подход или схема, с помощью которой я мог бы попытаться минимизировать дублирование обработчиков событий для выполнения одной цели?

ответ

0

Кажется, мне удалось найти работу вокруг, перед дальнейшими дополнениями к вкладке управления, я сделал следующие изменения:

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

С добавлением tag элемента, чтобы дать параметр/значение в пределах sender объекта & проверки как таковой:

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

которая бросает объект Sender на кнопку, которая INTURN позволит мне получить значение разобран внутри tag Eleme nt, перейдите к строке & распечатайте в текстовом поле. Что после манипуляций с данными выглядит примерно так:

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; 
     } 
    } 
Смежные вопросы