I have a Windows 8.1 application with a settings flyout which will open when you click a custom setting in the settings charms bar.
However my content inside the settings flyout is not using the full height/width of the settings flyout instead has a uniform margin across all corners. The following picture displays the same.
For better understanding I have put black and red backgrounds. The black background is for SettingsFlyout, the red is for the StackPanel inside the Flyout. I have set the StackPanel height and width to the actualheight and actualwidth of the flyout Here's the XAML
<SettingsFlyout
x:Name="AccountsSettingsFlyoutElement"
x:Class="Something.AccountsSettingsFlyout"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Background="Black"
mc:Ignorable="d"
IconSource="Assets/SmallLogo.png"
Title="Accounts"
d:DesignWidth="346">
<!-- This StackPanel acts as a root panel for vertical layout of the content sections -->
<StackPanel Background="Red"
Width="{Binding ElementName=AccountsSettingsFlyoutElement, Path=ActualWidth}"
Height="{Binding ElementName=AccountsSettingsFlyoutElement, Path=ActualHeight}">
<StackPanel Style="{StaticResource SettingsFlyoutSectionStyle}">
<TextBlock Text="Accounts"
x:Uid="AccountsSettings_Title"
VerticalAlignment="Bottom"
Style="{StaticResource SettingTitleStyle}" />
</StackPanel>
</StackPanel>
As you can see the red is not covering the whole of the black region. I want to create a UI like this.
Now if you notice at the bottom of the above figure. The Add An Account Button covers the entire width of the Flyout.
How do I achieve a UI similar to this?
ActualHeight is not a dependency property so the binding is probably not working. The way to 'bind' the height is to use a SizeChanged event handler such as this.
private void ScrollViewer_OnSizeChanged(object sender, SizeChangedEventArgs e)
{
YourGrid.Width = e.NewSize.Width;
YourGrid.Height = e.NewSize.Height;
}
The SettingsFlyout Style has a padding built-in. To use the total area for your content, set the padding property to 0.
<SettingsFlyout x:Class="ApplicationSettings.SettingsFlyout1"
Padding="0" ...
Last thing, to set the correct size, use the size of the content presenter.
<ScrollViewer x:Name="ScrollViewer"
AutomationProperties.AccessibilityView="Raw"
HorizontalScrollMode="{TemplateBinding ScrollViewer.HorizontalScrollMode}"
HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}"
Grid.Row="1"
SizeChanged="ScrollViewer_OnSizeChanged"
VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}"
VerticalScrollMode="{TemplateBinding ScrollViewer.VerticalScrollMode}"
ZoomMode="{TemplateBinding ScrollViewer.ZoomMode}">
<ContentPresenter x:Name="ContentPresenter"
ContentTemplate="{TemplateBinding ContentTemplate}"
ContentTransitions="{Binding TemplateSettings.ContentTransitions, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Content="{TemplateBinding Content}"
Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</ScrollViewer>