带绑定的自定义按钮

时间:2014-03-07 10:31:03

标签: c# wpf button custom-controls

我想在WPF中创建一个Custon Button,所以我写了这段代码:

<UserControl x:Class="RiabilitazioneCognitiva.ButtonPersonalizzati"
             DataContext="{Binding RelativeSource={RelativeSource Self}}"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" Width="Auto" Height="Auto">
    <FrameworkElement.Resources>
        <ResourceDictionary Source="GlassButton.xaml" />
    </FrameworkElement.Resources>
        <Button  x:Name="pippo" Style="{DynamicResource GlassButton}" 
        Click="button_Click">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding Text}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FFFFFFFF"  />

        </StackPanel>
    </Button>


</UserControl>

现在我在我的页面中插入此按钮,所以我尝试这段代码:

<Window xmlns:RiabilitazioneCognitiva="clr-namespace:RiabilitazioneCognitiva"  x:Name="framePrincipale" x:Class="RiabilitazioneCognitiva.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:RiabilitazioneCognitiva"
        Title="Stop" 
        Height="{Binding}" 
        Width="{Binding}" 
        Background="White" 
        WindowStartupLocation="CenterScreen" 
        WindowStyle="None"
        WindowState="Maximized"
        ResizeMode="NoResize">
</Window>

<Grid>
   <local:ButtonPersonalizzati />
</Grid>

它找到了,但是如果我插入这个我看不到按钮

<local:ButtonPersonalizzati x:Text="pp" >

我们可以帮助我吗?

由于

PS:在ButtonPersonalizzati.cs我有这个

public string Text { 
   get{return Text;}
}

3 个答案:

答案 0 :(得分:0)

您尚未设置数据上下文。有多种方法可以解决这个问题,但我的典型方法是做这样的事情:

<UserControl ...
             x:Name="ucThis">
         ...
        <TextBlock Text="{Binding ElementName=ucThis Path=Text}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#FFFFFFFF"  />
         ...
</UserControl>

答案 1 :(得分:0)

关闭代码local:ButtonPersonalizzati

<local:ButtonPersonalizzati x:Name="pp" local:Text="Pippo" />

答案 2 :(得分:-1)

Text定义为DependencyProperty,以便绑定到它:

public string Text
{
    get { return (string)GetValue(TextProperty); }
    set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
    DependencyProperty.Register("Text", typeof(string), typeof(ButtonPersonalizzati), new UIPropertyMetadata(""));

您还应该在类的构造函数中设置DataContext:

this.DataContext=this;