我对下面定义的控件模板上的某些元素进行了绑定,这个模板在我的自定义ResourceDictionary中定义,并被指定为MainPage.xaml中ContentControl的模板,我想要做的是绑定到元素属性我想通过Resistering DependencyProperties更改Code-Behind MainPage中的值,问题是它无法正常工作,例如在代码中使用“GPBaseBannerImage”代码中的getter .Source返回null,显然它什么都没发现....我认为我的ResourceDictionary ....的模板定义中的绑定是错误的。
<ControlTemplate x:Key="GPBaseTemplate" TargetType="ContentControl">
<ContentPresenter>
<Canvas x:Name="GPBaseCanvas"
Background="{StaticResource GPBaseBgBrush}"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Image x:Name="GPBaseBannerImage" Source="{Binding Source}"
Stretch="{Binding Stretch}"/>
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
<Grid x:Name="GPBaseGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RenderTransform>
<TranslateTransform X="0" Y="50" />
</Grid.RenderTransform>
<StackPanel x:Name="GPBaseContentPanel"
Background="{Binding Background}"
VerticalAlignment="{Binding VerticalAlignment}"
HorizontalAlignment="{Binding HorizontalAlignment}"
Width="{Binding Width}"
Height="{Binding Height}"
Grid.Row="0"
Grid.Column="0"/>
<StackPanel x:Name="GPBaseBtnPanel"
Background="Transparent"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Grid.Row="0"
Grid.Column="1">
<Button x:Name="GPBaseBtn_1"
Style="{StaticResource GPBaseBtnStyle}"
Background="{Binding Background}"
Click="{Binding Click}"/>
<Button x:Name="GPBaseBtn_2"
Style="{StaticResource GPBaseBtnStyle}"
Background="{Binding Background}"
Click="{Binding Click}"/>
<Button x:Name="GPBaseBtn_3"
Style="{StaticResource GPBaseBtnStyle}"
Background="{Binding Background}"
Click="{Binding Click}"/>
<Button x:Name="GPBaseBtn_4"
Style="{StaticResource GPBaseBtnStyle}"
Background="{Binding Background}"
Click="{Binding Click}"/>
<Button x:Name="GPBaseBtn_5"
Style="{StaticResource GPBaseBtnStyle}"
Background="{Binding Background}"
Click="{Binding Click}"/>
</StackPanel>
</Grid>
</Canvas>
</ContentPresenter>
</ControlTemplate>
我认为我没有正确使用它,因为我得到一个未处理的例外,任何帮助都将不胜感激。
干杯
答案 0 :(得分:0)
您没有关闭箭头,只是粘贴错误或?
<Image x:Name="GPBaseBannerImage" Source="{Binding Source}"
Stretch="{Binding Stretch} <----- ???
<Image.RenderTransform>
<TransformGroup>
<TranslateTransform X="{Binding X}" Y="{Binding Y}"/>
</TransformGroup>
</Image.RenderTransform>
</Image>
* ControlTemplate用法*
<ContentControl x:Name="GPMainMenuContentControl"
Template="{Binding Source={StaticResource GPBaseTemplate} }" >
</ContentControl>
答案 1 :(得分:0)
好的,我发现了我的问题,我需要在使用我的自定义模板的对象上设置DataContext,在这种情况下它是一个ContentControl,但是在Xaml中控件上设置DataContext由于某种原因不起作用,我必须在代码后面设置它,然后在GPBaseTemplateHelper的属性setter(set; Not Xaml Setter)中调用NotifyPropertyChanged。
public MainMenuPage()
{
InitializeComponent();
BaseTemplateHelper = new GPBaseTemplateHelper();
if (BaseTemplateHelper != null)
{
this.DataContext = BaseTemplateHelper;
}
}