iPhone как красный значок уведомления в проекте WPF?

У меня есть проект C # WPF, который автоматически генерирует ежедневные и еженедельные отчеты. Я хочу информировать пользователя о появлении новых отчетов, поэтому я подумал о значке, похожем на iPhone, где количество новых сообщений отображается в маленьком красном круге: alt text

Я подумал о трех изображениях: два изображения с полукругами слева и справа, если число для отображения мало. И третье изображение для середины для случая, когда число большое (123) и не помещается в круг. alt text

Я хочу глянцевый эффект, поэтому я подумал о фотографиях. У кого-нибудь есть хорошая идея, как сделать это без картинок, но программно?

8
задан Glorfindel 31 May 2019 в 19:05
поделиться

4 ответа

  1. . Включите ярлык в меню «Пуск» правильно настроить рабочий каталог? (Я подозреваю, что это наиболее вероятный ответ)

  2. Есть ли другая / неверная версия mysql.data.dll, установленная в GAC (кэш глобальной сборки)? Я видел, что это дайте подобные сообщения об ошибках раньше.

-121--1727165-

Используйте границу элемент и поместите свой текст внутри него. Вы можете установить свойство EngleRadius для границы соответствующим образом, чтобы она выглядела как круг (или округлый прямоугольник, если число больше).

Вот первый разрез, который использует тот факт, что угровалрадин будет зажат до половины высоты или ширины в Y и X соответственно:

 <Border Background="Red" CornerRadius="999" Padding="4">
    <TextBlock Foreground="White" FontWeight="Bold" FontSize="12">125</TextBlock>
 </Border>
17
ответ дан 5 December 2019 в 06:23
поделиться

Есть много учебных пособий WPF для глянцевых кнопок. По сути, создайте нормальную кнопку и используйте комбинацию эффектов и градиентов, чтобы изменить шаблон управления кнопкой, чтобы выглядеть как кнопка iPhone. Это образец, но вы можете сделать гораздо больше: http://craig.palenshus.com/silverlight/silverlight-and-the-content-presenter-in-an-iphone-like-button/

0
ответ дан 5 December 2019 в 06:23
поделиться

Это основано на ответе Chris1, но он будет правильно растягиваться, если текст внутри значка длиннее одной цифры. Я также установил шрифт, чтобы он был более согласованным в версиях Windows, немного изменил размер, чтобы компенсировать и добавил контур вокруг значка.

Я также заменил DropShadowEffect на Rectangle, потому что я не могу использовать DropShadowEffect в моем конкретном приложении, DropShadowEffect выглядит лучше, но моя тень Rectangle достаточно хороша, вы можете удалить прямоугольник тени и использовать DropShadowEffect, если хотите .

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <Style TargetType="Label" x:Key="CircularLabel">
      <Setter Property="Foreground" Value="White" />
      <Setter Property="FontWeight" Value="Bold" />
      <Setter Property="FontSize" Value="13" />
      <Setter Property="FontFamily" Value="Arial" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="Label">
            <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
              <Rectangle Margin="0 3 0 -3" Fill="LightGray" 
                      RadiusX="11" RadiusY="11" Opacity="0.8"/>
              <Border CornerRadius="11"
                      BorderBrush="DarkGray"
                      BorderThickness="1">
                <Border
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center" CornerRadius="10"
                        Background="#FFC90000"
                        BorderBrush="White"
                        BorderThickness="2">
                  <Grid>
                    <ContentPresenter
                            HorizontalAlignment="Center" VerticalAlignment="Center"
                            Content="{TemplateBinding Content}" Margin="5 1 6 1"/>
                    <Rectangle x:Name="TopShine" RadiusX="9" RadiusY="9"
                            VerticalAlignment="Stretch">
                      <Rectangle.Fill>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" Opacity="0.6">
                          <GradientStop Color="White" Offset="0.2" />
                          <GradientStop Color="Transparent" Offset="0.7" />
                        </LinearGradientBrush>
                      </Rectangle.Fill>
                    </Rectangle>
                  </Grid>
                </Border>
              </Border>
            </Grid>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Page.Resources>
  <Grid>
    <UniformGrid>
      <Label Style="{StaticResource CircularLabel}">4</Label>
      <Label Style="{StaticResource CircularLabel}">100000</Label>
      <Label Style="{StaticResource CircularLabel}">CLICK HERE</Label>
    </UniformGrid>
  </Grid>
</Page>
2
ответ дан 5 December 2019 в 06:23
поделиться

Вот моя попытка, это не идеально, но выглядит достаточно хорошо.

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <DropShadowEffect x:Key="ShadowEffect" Direction="270" BlurRadius="5" ShadowDepth="3"/>
        <Style TargetType="Label" x:Key="CircularLabel">
            <Setter Property="Foreground" Value="White" />
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="FontSize" Value="12" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Label">
                        <Grid>
                            <Rectangle HorizontalAlignment="Center" VerticalAlignment="Center" Width="20" Height="20" Fill="#FFC90000" RadiusX="10" RadiusY="10" Stroke="White" StrokeThickness="2" Effect="{StaticResource ShadowEffect}" />
                            <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="{TemplateBinding Content}"></ContentPresenter>
                            <Rectangle x:Name="TopShine" RadiusX="10" RadiusY="10" Width="20" Height="20" StrokeThickness="2">
                                <Rectangle.Fill>
                                    <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" Opacity="0.8">
                                        <GradientStop Color="White" Offset="0" />
                                        <GradientStop Color="Transparent" Offset="0.6" />
                                    </LinearGradientBrush>
                                </Rectangle.Fill>
                            </Rectangle>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
  </Page.Resources>
  <Grid>  
    <Label Style="{StaticResource CircularLabel}">1</Label>
  </Grid>
</Page>
0
ответ дан 5 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: