我希望有人可以帮助我.我正在构建一个WPF成像应用程序,它从相机中获取实时图像,允许用户查看图像,然后突出显示该图像上的感兴趣区域(ROI).然后将关于ROI的信息(宽度,高度,相对于图像上的点的位置等)发送回相机,实际上告知/训练相机固件在哪里寻找条形码,文本,液位,转弯等内容在图像上的螺丝等).所需的功能是能够平移和缩放图像及其ROI,以及在图像缩放比观看区域大时滚动.ROI的StrokeThickness和FontSize需要保持原始比例,但ROI内形状的宽度和高度需要与图像一起缩放(这对于捕获传输到相机的精确像素位置至关重要).除了滚动和其他一些问题之外,我已经解决了大部分问题.我关注的两个方面是:
当我介绍ScrollViewer时,我没有得到任何滚动行为.据我所知,我需要引入一个LayoutTransform来获得正确的ScrollViewer行为.然而,当我这样做时,其他区域开始崩溃(例如,ROI在图像上没有保持正确的位置,或者当平移时鼠标指针开始从图像上的选定点开始蠕动,或者我的图像的左角弹回到MouseDown上的当前鼠标位置.)
我无法按照我需要的方式扩展投资回报率.我有这个工作,但它并不理想.我所拥有的并没有保留精确的笔划厚度,我没有考虑忽略文本块上的比例.希望你能看到我在代码示例中正在做的事情.
我确定我的问题与我对Transforms及其与WPF布局系统的关系缺乏了解有关.希望展示我迄今为止所取得成就的代码将有所帮助(见下文).
仅供参考,如果Adorners是建议,可能在我的场景中不起作用,因为我最终会得到比支持更多的装饰(谣言144装饰者是事情开始崩溃的时候).
首先,下面是显示带有ROI(文本和形状)的图像的屏幕截图.矩形,椭圆和文本需要按照比例和旋转方式跟随图像上的区域,但不能在厚度或字体大小上进行缩放.

这是显示上面图像的XAML,以及用于缩放的滑块(鼠标滚轮缩放将在稍后出现)
<Window x:Class="PanZoomStackOverflow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Title="MainWindow" Height="768" Width="1024">
<DockPanel>
<Slider x:Name="_ImageZoomSlider" DockPanel.Dock="Bottom"
Value="2"
HorizontalAlignment="Center" Margin="6,0,0,0"
Width="143" Minimum=".5" Maximum="20" SmallChange=".1"
LargeChange=".2" TickFrequency="2"
TickPlacement="BottomRight" Padding="0" Height="23"/>
<!-- This resides in a user control in my solution -->
<Grid x:Name="LayoutRoot">
<ScrollViewer Name="border" HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<Grid x:Name="_ImageDisplayGrid">
<Image x:Name="_DisplayImage" Margin="2" Stretch="None"
Source="Untitled.bmp"
RenderTransformOrigin ="0.5,0.5"
RenderOptions.BitmapScalingMode="NearestNeighbor"
MouseLeftButtonDown="ImageScrollArea_MouseLeftButtonDown"
MouseLeftButtonUp="ImageScrollArea_MouseLeftButtonUp"
MouseMove="ImageScrollArea_MouseMove">
<Image.LayoutTransform>
<TransformGroup>
<ScaleTransform />
<TranslateTransform />
</TransformGroup>
</Image.LayoutTransform>
</Image>
<AdornerDecorator> <!-- Using this Adorner Decorator for Move, …Run Code Online (Sandbox Code Playgroud) 哪些(/sf/ask/34502541/)库可用于评估节点坐标?我的意思是我想绘制和操作图形,通过单击它来添加一些节点或删除,然后使用一些轻量级库来评估坐标.
我需要的是能够在点文件和特殊布局(http://en.wikipedia.org/wiki/DOT_language)上给出符合图节点和2D点的算法.
可预见的语言:C++,C#,Java
我需要画一条连接两个WPF控件的线.我已在我的对象中定义了依赖项属性,Node因此如果移动了节点,该行仍然会连接对象.
我有以下示例,但我无法让它工作.
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Node node1 = new Node(myCanvas) { Width = 50, Height = 50 };
Node node2 = new Node(myCanvas) { Width = 50, Height = 50 };
Canvas.SetLeft(node1, 0);
Canvas.SetLeft(node2, 200);
Canvas.SetTop(node1, 0);
Canvas.SetTop(node2, 0);
myCanvas.Children.Add(node1);
myCanvas.Children.Add(node2);
Connector conn = new Connector();
conn.Source = node1.AnchorPoint;
conn.Destination = node2.AnchorPoint;
myCanvas.Children.Add(conn);
}
}
class Node : Control
{
public static readonly DependencyProperty …Run Code Online (Sandbox Code Playgroud) 我有一个简单的 WPF 页面,其中有一个文本框字段,我的客户希望在页面显示时突出显示该字段。在后面的代码中,它将是三行,但我正在通过 MVVM(我开始认为它有点被高估了)。我已经尝试了许多不同的行为和全局事件变体FocusManager.FocusedElement,但我所做的一切都不会这样做。
最终,我使用的大部分代码都调用了这两行:
Keyboard.Focus(textBox);
textBox.SelectAll();
Run Code Online (Sandbox Code Playgroud)
但无论我把这些行放在哪里,文本框都只聚焦;未选择任何文本。我从来没有在这么简单的事情上遇到过这么多麻烦。我已经在互联网上打了两个小时的头。有谁知道如何做到这一点?
同样,我想要做的就是让文本框获得焦点,并且在导航到页面时选择所有文本。请帮忙!
我有一个带有一堆控件的 Windows 窗体,它工作得很好。所有控件都包含在一个中,TableLayoutPanel该控件根据控件基本大小自动调整大小,并Form根据面板自动调整大小,因此我实际上不必担心不同平台和计算机中的大小,因为所有内容都应根据当前配置的设置调整大小。
例如,这是一个简单的例子来说明它的外观。相关代码是:
//...code defining all the other Commands and .Add()'ing them to the Panel
form.Controls.Add(Panel);
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

我现在想要获取整个面板并将其放置在 TabControl 中,以便它只是许多其他选项卡中的一个选项卡。我这样做如下:
//...code defining all the other Commands and .Add()'ing them to the Panel
TabControl tabControl = new TabControl();
tabControl.Dock = DockStyle.Fill;
TabPage tabPage = new TabPage("C1");
tabPage.Controls.Add(Panel);
tabControl.TabPages.Add(tabPage);
form.Controls.Add(tabControl);
form.AutoSize = true;
form.FormBorderStyle = FormBorderStyle.FixedDialog;
form.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
所以基本上,我不是将 the 添加Panel到Form,而是将其TabPage添加到 添加到 的 ,TabControl然后将其添加到 …