2009-03-27 12 views
1

私はタブベースのチャットアプリケーションを持っています。これは、ユーザーがさまざまなタブ項目で複数の人とチャットできます。ユーザーがメッセージを受信したタブ以外の他のユーザーとチャットしている場合に、タブヘッダーを点滅させることによって、受信メッセージのユーザーに通知したいと考えています。どのように私はWPFでこれを達成することができます。いくつかの例は非常にappriciatedされます。イベント受信時の点滅タブのヘッダー

よろしく モルテザ

答えて

4

あなたは、ヘッダーの前景色を点滅/点滅するアニメーションを含むヘッダのスタイルを作成する必要があります。これを済ませたら、必要なときにこれを適用することができます。

以下の例ではこれを行います。これを変更して、TabItemsのテキストだけでなく、タブ全体が点滅するように背景を設定することもできます。これまでに、必要なときに

<Window x:Class="WpfApplication1.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 

    <Window.Resources> 
     <Style x:Key="FlashingHeader" TargetType="TabItem"> 
      <Setter Property="TabItem.HeaderTemplate"> 
       <Setter.Value> 
        <DataTemplate> 

         <!--Make The Header --> 
         <TextBlock x:Name="header" Foreground ="Black" Text="{Binding}"/> 

         <!--Make The Background Flash--> 
         <DataTemplate.Triggers> 
          <Trigger Property="Visibility" Value="Visible"> 
           <Trigger.EnterActions> 
           <BeginStoryboard> 
            <Storyboard Storyboard.TargetName="header" AutoReverse="True" RepeatBehavior="Forever" Storyboard.TargetProperty="Foreground.Color"> 
             <ColorAnimation To="Transparent" AutoReverse="True" Duration="0:0:0.5" /> 
            </Storyboard> 
           </BeginStoryboard> 
           </Trigger.EnterActions> 
          </Trigger> 
         </DataTemplate.Triggers> 

        </DataTemplate> 

       </Setter.Value> 
       </Setter> 

     </Style> 
    </Window.Resources> 

    <StackPanel> 

     <TabControl Height="150"> 
      <TabItem x:Name="one" Header="Page One"></TabItem> 
      <TabItem x:Name="two" Header="Page Two"></TabItem> 
      <TabItem x:Name="three" Header="Page Three"></TabItem> 
     </TabControl> 

     <StackPanel Orientation="Horizontal"> 

      <Label >Tab Number:</Label> 
      <TextBox x:Name="userInput" Width="80">two</TextBox> 
      <Button Click="StartFlash_Click">Start Flash</Button> 
      <Button Click="StopFlash_Click">Stop Flash</Button> 

     </StackPanel> 


    </StackPanel> 
</Window> 

そして、C#コードであなたのスタイルを設定することができます。

private void StartFlash_Click(object sender, RoutedEventArgs e) 
     { 
      TabItem ti = (TabItem)this.FindName(userInput.Text); 

      if (ti != null) 
      { 
       ti.SetValue(Control.StyleProperty, (Style)this.Resources["FlashingHeader"]); 
      } 

     } 

     private void StopFlash_Click(object sender, RoutedEventArgs e) 
     { 
      TabItem ti = (TabItem)this.FindName(userInput.Text); 

      if (ti != null) 
      { 
       ti.Style = null; 
      } 
     } 
関連する問題