You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF中通过C#代码向ContentControl添加可拖动缩放矩形的问题

解决ContentControl无法关联自定义模板并显示Rectangle的问题

1. 正确加载并应用自定义ControlTemplate

如果你的DesignerItemTemplate是在资源字典(比如Window.Resources或App.xaml)中定义的,需在C#代码中明确获取并赋值给ContentControl的Template属性:

// 假设模板在当前窗口资源中的Key为"DesignerItemTemplate"
var designerTemplate = (ControlTemplate)FindResource("DesignerItemTemplate");
var contentControl = new ContentControl();
contentControl.Template = designerTemplate;

2. 将Rectangle绑定为ContentControl的Content

不要单独把Rectangle添加到Canvas,而是直接将其赋值给ContentControl的Content属性:

var rect = new Rectangle
{
    Width = 100,
    Height = 100,
    Fill = Brushes.LightBlue,
    Stroke = Brushes.Black,
    StrokeThickness = 1
};
// 把Rectangle设为ContentControl的内容载体
contentControl.Content = rect;

3. 将ContentControl添加到Canvas的可视化树

确保最终把配置好的ContentControl添加到Canvas的Children集合中,同时设置拖拽位置:

// 假设你的Canvas实例名为mainCanvas
mainCanvas.Children.Add(contentControl);
// 根据拖拽时的鼠标坐标设置控件位置
Canvas.SetLeft(contentControl, e.GetPosition(mainCanvas).X - 50);
Canvas.SetTop(contentControl, e.GetPosition(mainCanvas).Y - 50);

4. 检查模板中的ContentPresenter绑定

确认DesignerItemTemplate里的ContentPresenter正确绑定了Content属性,否则Rectangle无法渲染:

<ContentPresenter Content="{TemplateBinding Content}"
                  HorizontalAlignment="Stretch"
                  VerticalAlignment="Stretch"/>

5. 验证模板中Thumb控件的引用

确保模板里正确引用了MoveThumb和ResizeThumb,且它们的事件逻辑(如DragDelta)已正确实现,避免因模板逻辑异常导致控件不显示:

<local:MoveThumb x:Name="moveThumb"
                 Cursor="SizeAll"/>
<local:ResizeThumb x:Name="resizeTopLeft"
                   Cursor="SizeNWSE"
                   HorizontalAlignment="Left"
                   VerticalAlignment="Top"/>

内容的提问来源于stack exchange,提问作者abbas akbarzade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:08:14