Feedback

C# - Windows Store Apps: Buttons zum Zoomen

Veröffentlicht von am 19.07.2014
(0 Bewertungen)
Dieses Snippet zeigt ein Control mit 2 Buttons zum Zoomen und dem Zoomfaktor dazwischen. Dieses lässt sich einfach in Windows Store Apps implementieren.

Benötigte Namespaces
Windows.UI.Xaml
Windows.UI.Xaml.Controls
Windows.UI.Xaml.Controls.Primitives

Nachfolgend der Style für die Generic.xaml:
<Style TargetType="RepeatButton" x:Key="ZoomButton">
<Setter Property="FontFamily" Value="Segoe UI Symbol"/>
<Setter Property="FontSize" Value="36"/>
<Setter Property="Template" >
<Setter.Value>
<ControlTemplate TargetType="RepeatButton">
<Grid>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="PointerOver">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDecreasePointerOverBackgroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDecreasePressedBackgroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDecreaseDisabledBackgroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="FocusStates">
<VisualState x:Name="Focused">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SliderTrackDecreaseDisabledBackgroundThemeBrush}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unfocused"/>
<VisualState x:Name="PointerFocused"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ContentPresenter x:Name="ContentPresenter" Content="{TemplateBinding Content}"/>

</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

<Style TargetType="local:ZoomButtons">
<Setter Property="FontSize" Value="30"/>
<Setter Property="Height" Value="48"/>
<Setter Property="Width" Value="192"/>
<Setter Property="HorizontalAlignment" Value="Right"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ZoomButtons">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition />
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="1" FontSize="{TemplateBinding FontSize}" x:Name="PART_Label" VerticalAlignment="Center" Margin="10 0 10 0" HorizontalAlignment="Center"/>
<RepeatButton Grid.Column="0" Content="&#xE1A4;" Style="{StaticResource ZoomButton}" x:Name="PART_ZoomOut" />
<RepeatButton Grid.Column="2" Content="&#xE12E;" Style="{StaticResource ZoomButton}" x:Name="PART_ZoomIn" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
GFU-Schulungen  [Anzeige]

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

[TemplatePart(Name = "PART_ZoomIn", Type = typeof(RepeatButton))]
[TemplatePart(Name = "PART_ZoomOut", Type = typeof(RepeatButton))]
[TemplatePart(Name = "PART_Label", Type = typeof(TextBlock))]
public sealed class ZoomButtons : Control
{
    public ZoomButtons()
    {
        this.DefaultStyleKey = typeof(ZoomButtons);
        this.Loaded += ZoomButtons_Loaded;
    }

    RepeatButton btnZoomIn, btnZoomOut;
    TextBlock lbl;

    void ZoomButtons_Loaded(object sender, RoutedEventArgs e)
    {
        lbl.Text = this.ZoomFactor.ToString(this.LabelFormat);
    }

    protected override void OnApplyTemplate()
    {
        base.OnApplyTemplate();
        btnZoomIn = (RepeatButton)GetTemplateChild("PART_ZoomIn");
        btnZoomOut = (RepeatButton)GetTemplateChild("PART_ZoomOut");
        lbl = (TextBlock)GetTemplateChild("PART_Label");

        btnZoomIn.Click += btnZoomIn_Click;
        btnZoomOut.Click += btnZoomOut_Click;
    }

    void btnZoomIn_Click(object sender, RoutedEventArgs e)
    {
        this.ZoomFactor *= this.ZoomChangeFactor;
        if (this.ZoomFactor > this.Maximum)
            this.ZoomFactor /= this.ZoomChangeFactor;
        lbl.Text = this.ZoomFactor.ToString(this.LabelFormat);
    }

    private void btnZoomOut_Click(object sender, RoutedEventArgs e)
    {
        this.ZoomFactor /= this.ZoomChangeFactor;
        if (this.ZoomFactor < this.Minimum)
            this.ZoomFactor *= this.ZoomChangeFactor;
        lbl.Text = this.ZoomFactor.ToString(this.LabelFormat);
    }

    #region DependencyProperties

    /// <summary>
    /// Bezeichnet die <see cref="ZoomFactor"/>-Abhängigkeitseigenschaft.
    /// </summary>
    public static readonly DependencyProperty ZoomFactorProperty = DependencyProperty.Register("ZoomFactor", typeof(double), typeof(ZoomButtons), new PropertyMetadata(1D));
    /// <summary>
    /// Bezeichnet die <see cref="ZoomChangeFactor"/>-Abhängigkeitseigenschaft.
    /// </summary>
    public static readonly DependencyProperty ZoomChangeFactorProperty = DependencyProperty.Register("ZoomChangeFactor", typeof(double), typeof(ZoomButtons), new PropertyMetadata(1.1D));
    /// <summary>
    /// Bezeichnet die <see cref="LabelFormat"/>-Abhängigkeitseigenschaft.
    /// </summary>
    public static readonly DependencyProperty LabelFormatProperty = DependencyProperty.Register("LabelFormat", typeof(string), typeof(ZoomButtons), new PropertyMetadata("P0"));
    /// <summary>
    /// Bezeichnet die <see cref="Minimum"/>-Abhängigkeitseigenschaft.
    /// </summary>
    public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double), typeof(ZoomButtons), new PropertyMetadata(0.1D));
    /// <summary>
    /// Bezeichnet die <see cref="Maximum"/>-Abhängigkeitseigenschaft.
    /// </summary>
    public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(ZoomButtons), new PropertyMetadata(5D));

    #endregion

    #region Properties

    /// <summary>
    /// Ruft den Zoomfaktor ab oder legt diesen fest.
    /// </summary>
    public double ZoomFactor
    {
        get { return (double)GetValue(ZoomFactorProperty); }
        set { SetValue(ZoomFactorProperty, value); }
    }
    /// <summary>
    /// Ruft die Zahl ab, mit der der <see cref="ZoomFactor"/> multipliziert bzw. dividierd wird wenn auf einen Button geklickt wird, oder legt diese fest.
    /// </summary>
    public double ZoomChangeFactor
    {
        get { return (double)GetValue(ZoomChangeFactorProperty); }
        set { SetValue(ZoomChangeFactorProperty, value); }
    }
    /// <summary>
    /// Ruft das String-Format ab, mit dem der Zoomfaktor in die Zeichendarstellung umgewandelt wird, oder legt dieses fest.
    /// </summary>
    public string LabelFormat
    {
        get { return (string)GetValue(LabelFormatProperty); }
        set { SetValue(LabelFormatProperty, value); }
    }
    /// <summary>
    /// Ruft den minimal erreichbaren Zoomfaktor ab oder legt diesen fest.
    /// </summary>
    public double Minimum
    {
        get { return (double)GetValue(MinimumProperty); }
        set { SetValue(MinimumProperty, value); }
    }
    /// <summary>
    /// Ruft den maximal erreichbaren Zoomfaktor ab oder legt diesen fest.
    /// </summary>
    public double Maximum
    {
        get { return (double)GetValue(MaximumProperty); }
        set { SetValue(MaximumProperty, value); }
    }

    #endregion
}
Abgelegt unter Zoom, Control, WindowsStoreApps.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!