我一直在尝试使用WPF,并且使用CustomControl制作了我自己的面板类型,这样我就可以让所有面板看起来像一个带背景,圆角等的盒子。
我没有遇到的麻烦是我想在运行时更改使用TemplateBinding绑定的项的属性。
我的问题是通过代码无法改变这一点。
希望有人能发现我的错误并告诉我我的位置有点密集。
这会找到contentControl并更改值,这只会在应用程序中出现,就好像绑定不活动一样。
希望有人可以提供帮助。
控件模板。
<ControlTemplate x:Key="ContentBoxControlTemplate" TargetType="{x:Type local:ContentBox}"><Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.124*"/>
<RowDefinition Height="0.876*"/>
</Grid.RowDefinitions>
<Border BorderBrush="Black" BorderThickness="0" HorizontalAlignment="Stretch" Height="Auto" VerticalAlignment="Stretch" CornerRadius="20" Grid.RowSpan="2" Style="{TemplateBinding Style}" />
<Rectangle HorizontalAlignment="Stretch" Height="Auto" RadiusY="0" StrokeThickness="0" VerticalAlignment="Stretch" Width="Auto" Margin="10,0,10,20" Fill="White" Grid.Row="1"/>
<Rectangle Fill="{DynamicResource TopInnerShadow}" HorizontalAlignment="Stretch" Height="Auto" RadiusY="0" StrokeThickness="0" VerticalAlignment="Stretch" Width="Auto" Margin="10,0,10,20" Grid.Row="1"/>
<Rectangle Fill="{DynamicResource RightInnerShadow}" HorizontalAlignment="Stretch" Height="Auto" RadiusY="0" StrokeThickness="0" VerticalAlignment="Stretch" Width="Auto" Margin="10,0,10,20" Grid.Row="1"/>
<TextBlock Grid.Row="0" x:Name="txtBoxHeading" HorizontalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Title}" VerticalAlignment="Stretch" d:LayoutOverrides="Width, Height" Foreground="White" FontSize="36" FontFamily="Arial" Margin="20,5"/>
<Grid Grid.Row="1">
<ContentControl Content="{TemplateBinding Content}" Margin="10,0,10,20"/>
</Grid>
</Grid>
</ControlTemplate>
ContentControl
public class ContentBox : ContentControl
{
static ContentBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ContentBox), new FrameworkPropertyMetadata(typeof(ContentBox)));
}
private string _title = "";
public string Title
{
get { return _title; }
set { _title = value; }
}
// Dependency Property
public static DependencyProperty TitleProperty = DependencyProperty.Register("Title", typeof(string), typeof(ContentBox), new FrameworkPropertyMetadata("Title"));
}
使用内容控件的xaml
最后更改属性的代码
(this.Parent as ContentBox).Title = "Campaign: " + campaigns[0].Name;
答案 0 :(得分:2)
我发现了自己的错误,我就像我想的那样,很傻!!
在ContentControl中,我没有正确设置依赖属性。
将contentcontrol中的属性更改为以下修复我的问题
public string Title
{
get { return (string)this.GetValue(TitleProperty); }
set { this.SetValue(TitleProperty, value); }
}