Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / operating-systems / Windows / Win8

CharmFrame – The Design

0.00/5 (No votes)
23 Oct 2012CPOL 4.6K  
CharmFrame - the Design

The whole point of CharmFrame is to allow the developer to add another user interface element (like a UserControl) that overlays the content in the application’s main Frame. To do this, I created a Frame-derived class called CharmFrame. It provides one additional property called CharmContent. Whatever is placed in CharmContent is overlayed with the frame’s normal content.

Posts in this series:

Below is the full source to CharmFrame and the associated style. It is self-explanatory.

CharmFrame.cs

C#
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace CharmFlyoutLibrary
{
    public sealed class CharmFrame : Frame
    {
        public CharmFrame()
        {
            this.DefaultStyleKey = typeof(CharmFrame);
        }

        public object CharmContent
        {
            get { return (object)GetValue(CharmContentProperty); }
            set { SetValue(CharmContentProperty, value); }
        }

        public static readonly DependencyProperty CharmContentProperty =
            DependencyProperty.Register("CharmContent", 
            typeof(object), typeof(CharmFrame), new PropertyMetadata(null));
    }
}

Generic.xaml

XML
<Style
   TargetType="local:CharmFrame">
    <Setter
       Property="HorizontalContentAlignment"
       Value="Stretch" />
    <Setter
       Property="IsTabStop"
       Value="False" />
    <Setter
       Property="VerticalContentAlignment"
       Value="Stretch" />
    <Setter
       Property="Template">
        <Setter.Value>
            <ControlTemplate
               TargetType="local:CharmFrame">
                <Grid>
                    <Border
                       BorderBrush="{TemplateBinding BorderBrush}"
                       BorderThickness="{TemplateBinding BorderThickness}"
                       Background="{TemplateBinding Background}">
                        <ContentPresenter
                           ContentTemplate="{TemplateBinding ContentTemplate}"
                           ContentTransitions="{TemplateBinding ContentTransitions}"
                           Content="{TemplateBinding Content}"
                           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                           Margin="{TemplateBinding Padding}"
                           VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
                    </Border>
                    <ContentPresenter
                       Content="{TemplateBinding CharmContent}" />
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

To use CharmFrame, modify the code in App.xaml.cs to construct a CharmFrame instead of a Frame. Here, the CharmContent is a green rectangle that remains in the center of the display as the main content scrolls left/right.

App.xaml.cs

C#
var rootFrame = new CharmFrame { CharmContent = new Rectangle 
{ Width = 300, Height = 200, Fill = new SolidColorBrush(Windows.UI.Colors.Green) } };

CharmFrame

Further Reading

This post explains how to use CharmFrame to host CharmFlyouts: CharmFrame – Adding CharmFlyout to Grid Apps.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)