c# – 自定义WPF / XAML画布
我正在尝试创建和使用自定义Canvas.这是XAML(MyCanvas.xaml):
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Core="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Namespace="clr-namespace:MyNamepace" xmlns:Properties="clr-namespace:MyNamepace.Properties" Core:Class="MyNamepace.MyCanvas"> <Canvas.Resources> <Namespace:ImagesConverter Core:Key="ImagesConverter"/> </Canvas.Resources> <Image Source="{Binding Source={Core:Static Properties:Resources.Background},Converter={StaticResource ImagesConverter}}" Stretch="Fill"/> </Canvas> 这是代码声明(MyCanvas.xaml.cs): public partial class MyCanvas : Canvas 当我尝试使用它时: <Namespace:MyCanvas Core:Name="Layout" Loaded="OnLoaded"> <Namespace:MyUserControl Core:Name="Control1" Namespace:MyCanvas.Left="50" MyProperty="50"> <Namespace:MyCanvas.Top> <MultiBinding Converter="{StaticResource MathConverter}" ConverterParameter="(x - y) / 2"> <Binding ElementName="Layout" Path="ActualHeight"/> <Binding Path="ActualHeight" RelativeSource="{RelativeSource Self}"/> </MultiBinding> </Namespace:MyCanvas.Top> </Namespace:MyUserControl> <Namespace:MyUserControl Core:Name="Control2" Namespace:MyCanvas.Left="744" Namespace:MyCanvas.Top="42" MyProperty="150"/> </Namespace:MyCanvas> 我得到两个不同的错误:
编辑:这是我到目前为止…仍然得到“内容”已设置错误! MyCanvas.xaml <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Core="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Namespace="clr-namespace:MyNamespace" xmlns:Properties="clr-namespace:MyNamespace.Properties" Core:Class="MyNamespace.MyCanvas"> <Canvas.Background> <ImageBrush ImageSource="{Binding Source={Core:Static Properties:Resources.Background},Converter={StaticResource ImagesConverter}}" Stretch="Fill"/> </Canvas.Background> <Canvas.Resources> <Namespace:ImagesConverter Core:Key="ImagesConverter"/> </Canvas.Resources> </Canvas> MyCanvas.xaml.cs public class MyCanvas : Canvas { // ... } MainWindow.xaml <Namespace:MyCanvas Core:Name="MyCanvas" Loaded="OnLoaded"> <Namespace:MyUserControl ... <Namespace:MyUserControl ... <Namespace:MyUserControl ... </Namespace:MyCanvas> 解决方法
Left和Top是
attached properties.这意味着它们不会被你的类继承.
您需要更改用户控件声明以使用Canvas.Left和Canvas.Top: <Namespace:MyUserControl Core:Name="Control2" Canvas.Left="744" Canvas.Top="42" MyProperty="150"/> 内容的问题是您将其设置两次,就像错误消息所说的那样. >在MyCanvas.xaml中,将其设置为图像. 要修复它,您需要将ItemsControl添加到MyCanvas并将其声明为表示内容的控件: <Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:Core="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Namespace="clr-namespace:MyNamepace" xmlns:Properties="clr-namespace:MyNamepace.Properties" Core:Class="MyNamepace.MyCanvas"> <Canvas.Resources> <Namespace:ImagesConverter Core:Key="ImagesConverter"/> </Canvas.Resources> <Image Source="{Binding Source={Core:Static Properties:Resources.Background},Converter={StaticResource ImagesConverter}}" Stretch="Fill"/> <ItemsControl Content="{Binding Path=LocalContent,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Namespace:MyCanvas}}}" /> </Canvas> 在您的类文件中: [ContentProperty("LocalContent")] public partial class MyCanvas : Canvas { public static readonly DependencyProperty LocalContentProperty = DependencyProperty.Register( "LocalContent",typeof(UIElementCollection),typeof(MyCanvas ),new PropertyMetadata(default(UIElementCollection))); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |