Мигает заголовок вкладки при получении события - PullRequest
1 голос
/ 27 марта 2009

У меня есть приложение чата на основе вкладок, в котором пользователь может общаться с несколькими людьми в разных элементах вкладок. Я хочу уведомлять пользователя о входящих сообщениях, мигая заголовком вкладки, если пользователь общается с другим пользователем, кроме вкладки, которая получает сообщение. Как я могу добиться этого в WPF. Некоторый пример будет очень ценен.

С наилучшими пожеланиями Morteza

1 Ответ

5 голосов
/ 29 марта 2009

Вам нужно создать стиль для заголовка, который включает в себя анимацию, чтобы мигать / мигать передним планом заголовка. Если у вас есть это, вы можете применить его, когда это необходимо.

Пример ниже делает это. Вы можете изменить это, поэтому установите фон вместо этого, чтобы заставить мигать вся вкладка, а не только текст 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;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...