Wpf 访问在模板中具有setter的属性

Wpf 访问在模板中具有setter的属性,wpf,Wpf,我有一个画布,它可以拍摄多种类型的对象,并在特定位置显示它们。 大多数对象都有一个由“Setter”设置的Location属性,它非常有效 我有一个复杂的对象——由4个位图组合而成。 我希望能够使用canvas.top和canvas.left设置每个位图位置,但不使用setter中的位置(它们没有),而是使用它们自己的位置属性 这是代码 我的问题是WPF完全忽略我的canvas.top和canvas.left赋值,即使我使用数字而不绑定,也不会发生任何事情 有什么问题吗 这是我目前的代码。 Co

我有一个画布,它可以拍摄多种类型的对象,并在特定位置显示它们。 大多数对象都有一个由“Setter”设置的Location属性,它非常有效

我有一个复杂的对象——由4个位图组合而成。 我希望能够使用canvas.top和canvas.left设置每个位图位置,但不使用setter中的位置(它们没有),而是使用它们自己的位置属性

这是代码

我的问题是WPF完全忽略我的canvas.top和canvas.left赋值,即使我使用数字而不绑定,也不会发生任何事情

有什么问题吗

这是我目前的代码。 ComplexBitmap在0,0中绘制自身,而不是在预期的位置

<ItemsControl Name="itemtest"  ItemsSource="{Binding}" Height="576" Background="#FFB0B4B4" Width="704">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <local2:DragCanvas x:Name="canvas1" AllowDragging="true" AllowDragOutOfView="False"  Width="704" Height="576" Background="#3AC2DED4"/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemContainerStyle>
                        <Style TargetType="ContentPresenter">
                            <Setter Property="Canvas.Left" Value="{Binding Path=Location.X, Mode=TwoWay}"/>
                            <Setter Property="Canvas.Top" Value="{Binding Path=Location.Y,  Mode=TwoWay}"/>
                            <Setter Property ="Visibility" Value="{Binding Path= ShowOnDemo, Converter={StaticResource BooleanToVisibilityConverter}}" />
                        </Style>
                    </ItemsControl.ItemContainerStyle>
                    <ItemsControl.ItemTemplateSelector>
                        <local:CustomTemplateSelector>
                            .
                            <local:CustomTemplateSelector.BitmapTemplate>
                                <DataTemplate>
                                    <StackPanel>
                                        <Image Source="{Binding Path=Bitmaps/myBitmap}" Canvas.Left="{Binding Path=Location.X, Mode=TwoWay}" Canvas.Top="{Binding Path=Location.Y, Mode=TwoWay}" />
                                    </StackPanel>
                               </DataTemplate>
                                </local:CustomTemplateSelector.BitmapTemplate>
                            .
                            <local:CustomTemplateSelector.ComplexBitmapTemplate >
                                <DataTemplate>
                                    <Grid>
                                        <StackPanel>
                                            <Image Source="{Binding Path=TopLeftBitmapObj.myBitmap}" Canvas.Left="400" Canvas.Top="400" /> <-- Here I've tried to bind to another property, but even the 400 didn't work --> 
                                       </StackPanel>
                                       <-- Here comes 3 more bitmaps --> 
                                    </Grid>
                                </DataTemplate>
                            </local:CustomTemplateSelector.ComplexBitmapTemplate>
                        </local:CustomTemplateSelector>
                    </ItemsControl.ItemTemplateSelector>
                </ItemsControl>

.
.

请检查以下内容:

  • 在visual studio中以调试模式运行并检查路径错误(如Raptor sugested所示)
  • 除去 内容演示者的样式(如您所说,ComplexBitmap 不包含位置属性…)

  • 听起来您的项目可能不会立即放置在画布上?您可以发布从Snoop中获取的可视树的屏幕截图吗?同时仔细检查您的源绑定路径。@raptor-源代码如图片所示是正常的,但在0,0而不是400400上…+1对于HighCore,似乎
    图像
    不是画布的直接子级。您是否尝试过将画布绑定与
    StackPanel
    Datagrid