我有一個相當奇怪的問題,不想調整大小的控件。 Bellow是用SL4編寫的控制背後的XAML +代碼。用戶控件不調整大小
因此,爲了解釋一些事情,控件有4個區域 - Header,Subheader,BodyContent和Footer。每個區域都由一個「Border」元素表示,該元素充當其嵌套子元素的容器。
這個控制只是爲了統一我的應用程序的外觀和感覺,並沒有真正做任何事情就邏輯。
我的問題是,如果我想使用該控件,我必須明確地設置它的寬度。使用元素到元素綁定(對父容器)設置寬度時,控件甚至不會呈現。
我還嘗試創建一個「公共新的雙寬/高」屬性,其中我將設置控件本身的寬度和「ControlBorder」元素的寬度。使用這個屬性還會使控件在運行時不渲染:(我也嘗試過連接Size Changed事件,但它一直給我發出循環錯誤!
關於如何使這個控件更「可調整大小」的任何想法?應用程序是在採用網格分配器網格使用它。這是絕對必要的控制知道如何調整自己!
任何幫助將不勝感激! 感謝
馬丁
<UserControl xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit" x:Class="SL4.Learning.LayoutPanel"
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"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<UserControl.Resources>
<SolidColorBrush x:Key="DarkBrush" Color="#7B4C4C4B"/>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border x:Name="ControlBorder" Grid.Row="0" Grid.Column="0" BorderBrush="{StaticResource DarkBrush}" BorderThickness="2" CornerRadius="4" Margin="2">
<Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="LayoutHeaderRow" Height="30"/>
<RowDefinition x:Name="LayoutSubHeaderRow" Height="30"/>
<RowDefinition x:Name="LayoutContentRow" Height="*"/>
<RowDefinition x:Name="LayoutFooterRow" Height="30"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Rectangle x:Name="PnlHeaderBackground" Grid.Row="0" Grid.Column="0" Fill="{StaticResource DarkBrush}"/>
<toolkit:DockPanel Grid.Row="0" Grid.Column="0" LastChildFill="False">
<TextBlock x:Name="LblHeaderTitle" Text="Header Text" FontSize="12" Foreground="White" toolkit:DockPanel.Dock="Left" VerticalAlignment="Center" Margin="4,0,0,0"/>
<Border x:Name="HeaderBorder" toolkit:DockPanel.Dock="Right" BorderThickness="0" BorderBrush="Transparent" Margin="0" CornerRadius="0">
</Border>
</toolkit:DockPanel>
<Border x:Name="SubHeaderBorder" Grid.Row="1" Grid.Column="0" BorderThickness="0" BorderBrush="Transparent" Margin="0" CornerRadius="0">
</Border>
<Border x:Name="ContentBorder" Grid.Row="2" Grid.Column="0" BorderThickness="0" BorderBrush="Transparent" Margin="0" CornerRadius="0">
</Border>
<Border x:Name="FooterBorder" Grid.Row="3" Grid.Column="0" BorderThickness="0" BorderBrush="Transparent" Margin="0" CornerRadius="0">
</Border>
</Grid>
</Border>
</Grid>
</UserControl>
而後面的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Data;
namespace SL4.Learning
{
public partial class LayoutPanel : UserControl
{
public static readonly DependencyProperty BorderRadiusProperty = DependencyProperty.Register("BorderRadius", typeof(CornerRadius), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderTextProperty = DependencyProperty.Register("HeaderText", typeof(string), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderBackgroundProperty = DependencyProperty.Register("HeaderBackground", typeof(Brush), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderForegroundProperty = DependencyProperty.Register("HeaderForeground", typeof(Brush), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderFontSizeProperty = DependencyProperty.Register("HeaderFontSize", typeof(double), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderFontFamilyProperty = DependencyProperty.Register("HeaderFontFamily", typeof(FontFamily), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderFontWeightProperty = DependencyProperty.Register("HeaderFontWeight", typeof(FontWeight), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderFontStyleProperty = DependencyProperty.Register("HeaderFontStyle", typeof(FontStyle), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderFontStretchProperty = DependencyProperty.Register("HeaderFontStretch", typeof(FontStretch), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty HeaderContentProperty = DependencyProperty.Register("HeaderContent", typeof(UIElement), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty SubHeaderContentProperty = DependencyProperty.Register("SubHeaderContent", typeof(UIElement), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty BodyContentProperty = DependencyProperty.Register("BodyContent", typeof(UIElement), typeof(KeystoneContentControl), null);
public static readonly DependencyProperty FooterContentProperty = DependencyProperty.Register("FooterContent", typeof(UIElement), typeof(KeystoneContentControl), null);
public KeystoneContentControl()
{
InitializeComponent();
}
public new double Width
{
get { return this.Width; }
set
{
this.Width = value;
this.ControlBorder.Width = value;
}
}
public new double Height
{
get { return this.Height; }
set
{
this.Height = value;
this.ControlBorder.Height = value;
}
}
public new Brush BorderBrush
{
get { return this.ControlBorder.BorderBrush; }
set { this.ControlBorder.BorderBrush = value; }
}
public new Thickness BorderThickness
{
get { return this.ControlBorder.BorderThickness; }
set { this.ControlBorder.BorderThickness = value; }
}
public CornerRadius BorderRadius
{
get{ return (CornerRadius)this.GetValue(KeystoneContentControl.BorderRadiusProperty); }
set
{
this.SetValue(KeystoneContentControl.BorderRadiusProperty, value);
this.ControlBorder.CornerRadius = value;
}
}
public Brush HeaderBackground
{
get{ return (Brush)this.GetValue(KeystoneContentControl.HeaderBackgroundProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderBackgroundProperty, value);
this.PnlHeaderBackground.Fill = value;
}
}
public Brush HeaderForeground
{
get{ return (Brush)this.GetValue(KeystoneContentControl.HeaderForegroundProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderForegroundProperty, value);
this.LblHeaderTitle.Foreground = value;
}
}
public double HeaderFontSize
{
get { return (double)this.GetValue(KeystoneContentControl.HeaderFontSizeProperty); }
set
{
this.LblHeaderTitle.FontSize = value;
}
}
public FontFamily HeaderFontFamily
{
get { return (FontFamily)this.GetValue(KeystoneContentControl.HeaderFontFamilyProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderFontFamilyProperty, value);
this.LblHeaderTitle.FontFamily = value;
}
}
public FontWeight HeaderFontWeight
{
get{ return (FontWeight)this.GetValue(KeystoneContentControl.HeaderFontWeightProperty); }
set
{
this.SetValue(HeaderFontWeightProperty, value);
this.LblHeaderTitle.FontWeight = value;
}
}
public FontStyle HeaderFontStyle
{
get { return (FontStyle)this.GetValue(KeystoneContentControl.HeaderFontStyleProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderFontStyleProperty, value);
this.LblHeaderTitle.FontStyle = value;
}
}
public FontStretch HeaderFontStretch
{
get { return (FontStretch)this.GetValue(KeystoneContentControl.HeaderFontStretchProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderFontStretchProperty, value);
this.LblHeaderTitle.FontStretch = value;
}
}
public string HeaderText
{
get { return (string)this.GetValue(KeystoneContentControl.HeaderTextProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderTextProperty, value);
this.LblHeaderTitle.Text = value;
}
}
public UIElement HeaderContent
{
get{ return (UIElement)this.GetValue(KeystoneContentControl.HeaderContentProperty); }
set
{
this.SetValue(KeystoneContentControl.HeaderContentProperty, value);
this.HeaderBorder.Child = value;
}
}
public UIElement SubHeaderContent
{
get{ return (UIElement)this.GetValue(KeystoneContentControl.SubHeaderContentProperty); }
set
{
this.SetValue(KeystoneContentControl.SubHeaderContentProperty, value);
this.SubHeaderBorder.Child = value;
}
}
public UIElement BodyContent
{
get { return (UIElement)this.GetValue(KeystoneContentControl.BodyContentProperty); }
set
{
this.SetValue(KeystoneContentControl.BodyContentProperty, value);
this.ContentBorder.Child = value;
}
}
public UIElement FooterContent
{
get{ return (UIElement)this.GetValue(KeystoneContentControl.FooterContentProperty); }
set
{
this.SetValue(KeystoneContentControl.FooterContentProperty, value);
this.FooterBorder.Child = value;
}
}
}
}
編輯:婁是該用戶控件的頁面
<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="SL4.Learning.MainPage"
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"
mc:Ignorable="d"
d:DesignHeight="600"
d:DesignWidth="800"
xmlns:my="clr-namespace:SL4.Learning">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="LeftCol" />
<ColumnDefinition x:Name="RightCol" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition x:Name="RowHeight" />
</Grid.RowDefinitions>
<my:LayoutPanel Grid.Row="0" Grid.Column="0" Width="{Binding ElementName=LeftCol, Path=ActualWidth}" HorizontalAlignment="Left" x:Name="PnlLayout" VerticalAlignment="Top">
<my:LayoutPanel.SubHeaderContent>
<TextBlock x:Name="SubHeaderLabel" Text="SubHeader" FontWeight="Bold" VerticalAlignment="Center"/>
</my:LayoutPanel.SubHeaderContent>
<my:LayoutPanel.BodyContent>
<TextBlock x:Name="LblContentText" Text="BodyContent" VerticalAlignment="Center"/>
</my:LayoutPanel.BodyContent>
<my:LayoutPanel.FooterContent>
<TextBlock x:Name="LblFooterText" Text="Footer" VerticalAlignment="Center"/>
</my:LayoutPanel.FooterContent>
</my:LayoutPanel>
</Grid>
</UserControl>
你能舉一個你使用用戶控件的例子嗎?用戶控件的大小設置爲* not *,默認情況下它將需要伸展(因爲您的外部網格行/ col大小設置爲「star」)。 –
@HiTech Magic我剛剛添加了控件的用法。你的意思是「用戶控件的大小沒有設置爲伸展?」這是控制網格的一個選項嗎? – bleepzter
這是一個選項*你插入你的控件*。將HorizontalAlignment和VerticalAlignment設置爲在外頁面中的SL4.Learning.LayoutPanel對象的實例上拉伸。 –