快速概述
我已经创建了一个自定义控件“ InputValuePage”。 我已经使用名为InputTitle的控件注册了依赖项属性。 在用户控件InputTitle中绑定到文本块效果很好,但是当我将此自定义控件作为框架或窗口中的子级使用时,我不能使用绑定来设置依赖项属性。下面是用于InputTitle属性的代码。
后面的自定义控件类代码:
public partial class InputValuePage : Page
{
public static readonly DependencyProperty InputTitleProperty =
DependencyProperty.Register("InputTitle", typeof(string), typeof(InputValuePage));
public string InputTitle
{
get { return (string)GetValue(InputTitleProperty); }
set { SetValue(InputTitleProperty, value); }
}
public InputValuePage()
{
InitializeComponent();
}
}
示例用法:
<Frame Grid.Row="2"
Grid.ColumnSpan="2"
Grid.RowSpan="2"
x:Name="DisFrame">
<Frame.Content>
<local:InputValuePage
InputMessage="This gets set in the control."
InputTitle="{Binding ElementName=DisFrame, Path=Name}"
HostWindow="{Binding ElementName=DemoWindow}">
</local:InputValuePage>
</Frame.Content>
</Frame>
为阐明XAML中设置的三个值,所有都是依赖项属性。提供字符串时,可以成功设置输入消息和标题,但是数据绑定实际上从未设置值。我缺少允许绑定数据的什么内容?
答案 0 :(得分:0)
如果您进行自定义控件,则效果很好。自定义控件继承自 Control 。您的课程继承自 Page 。
我用以下代码尝试过:
awk '
NR == FNR {
a[$1] = $2
next
}
{
for ( i = 1 ; i <= NF ; i++ ) {
b = $i
gsub ( "^{|}$" , "" , b )
if ( b in a )
sub ( "{" b "}" , a[b] , $i )
}
} 1' FS='=' param1.txt FS=" " source1.txt
这是我的Generic.xaml文件中的ControlTemplate。请注意,您可以使用TemplateBinding访问模板中的属性。
using System.Windows;
using System.Windows.Controls;
namespace WpfCustomControlLibrary1
{
public class InputValuePage : Control
{
public static readonly DependencyProperty InputTitleProperty =
DependencyProperty.Register ("InputTitle", typeof (string), typeof (InputValuePage));
public string InputTitle
{
get { return (string)GetValue (InputTitleProperty); }
set { SetValue (InputTitleProperty, value); }
}
static InputValuePage ( )
{
DefaultStyleKeyProperty.OverrideMetadata (typeof (InputValuePage), new FrameworkPropertyMetadata (typeof (InputValuePage)));
}
}
}
在创建自定义控件项目时,Visual Studio会自动生成ControlTemplate。
在测试项目中,我将InputTitle属性连接到TextBox的内容。
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfCustomControlLibrary1">
<Style TargetType="{x:Type local:InputValuePage}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:InputValuePage}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" Text="{TemplateBinding InputTitle}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
我很确定,如果您觉得更简单的话,也可以与UserControl一起使用。
很明显,它不适用于Page。