У меня есть проект C # WPF, который автоматически генерирует ежедневные и еженедельные отчеты. Я хочу информировать пользователя о появлении новых отчетов, поэтому я подумал о значке, похожем на iPhone, где количество новых сообщений отображается в маленьком красном круге:
Я подумал о трех изображениях: два изображения с полукругами слева и справа, если число для отображения мало. И третье изображение для середины для случая, когда число большое (123) и не помещается в круг.
Я хочу глянцевый эффект, поэтому я подумал о фотографиях. У кого-нибудь есть хорошая идея, как сделать это без картинок, но программно?
. Включите ярлык в меню «Пуск» правильно настроить рабочий каталог? (Я подозреваю, что это наиболее вероятный ответ)
Есть ли другая / неверная версия mysql.data.dll, установленная в GAC (кэш глобальной сборки)? Я видел, что это дайте подобные сообщения об ошибках раньше.
Используйте границу элемент и поместите свой текст внутри него. Вы можете установить свойство EngleRadius для границы соответствующим образом, чтобы она выглядела как круг (или округлый прямоугольник, если число больше).
Вот первый разрез, который использует тот факт, что угровалрадин будет зажат до половины высоты или ширины в Y и X соответственно:
<Border Background="Red" CornerRadius="999" Padding="4">
<TextBlock Foreground="White" FontWeight="Bold" FontSize="12">125</TextBlock>
</Border>
Есть много учебных пособий WPF для глянцевых кнопок. По сути, создайте нормальную кнопку и используйте комбинацию эффектов и градиентов, чтобы изменить шаблон управления кнопкой, чтобы выглядеть как кнопка iPhone. Это образец, но вы можете сделать гораздо больше: http://craig.palenshus.com/silverlight/silverlight-and-the-content-presenter-in-an-iphone-like-button/
Это основано на ответе 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>
Вот моя попытка, это не идеально, но выглядит достаточно хорошо.
<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>