<Window x:Class="ShelfMapping.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Shelf Mapping" Height="800" Width="1320"
Loaded="Window_Loaded" Unloaded="Window_Unloaded">
<Grid>
<Image Name="camera" Width="640" Height="480" Margin="10,10,662,279" />
<Image Name="depthOut" Height="480" Width="640" Margin="667,10,5,289"/>
<Canvas Name="canvas" Width="640" Height="480" Margin="667,10,5,289"/>
<Button Content="Screenshot" HorizontalAlignment="Left" Margin="298,649,0,0" VerticalAlignment="Top" Width="75" Click="buttonScreenshotClick"/>
<TextBox Name="txtCode" HorizontalAlignment="Left" Height="101" Margin="901,514,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="223"/>
<Button Content="OCR" HorizontalAlignment="Left" Margin="486,649,0,0" VerticalAlignment="Top" Width="75" RenderTransformOrigin="-0.205,0.304" Click="click_OCR"/>
</Grid>
</Window>
这是我的XAML代码。我想在主窗口类之外使用canvas
变量。我不知道如何在MainWindow.cs
之外使用该变量。
答案 0 :(得分:0)
xaml
(x)名称空间具有以下属性:
x:FieldModifier="public"
所以你的代码:
<Canvas x:Name="canvas" x:FieldModifier="public" Width="640" Height="480" Margin="667,10,5,289"/>
现在,如果您的实例为MainWindow
,则可以访问此canvas
。
在MainWindow.cs codebehind
中创建一个公共属性public Canvas Canvas { get { return cica; } }
(如果你想变得很脏,可能是静态的)
ps:评论是对的。您的设计有问题
答案 1 :(得分:0)
我刚刚为一个小练习创建了一个例子。我不确定它是否适合这里,因为我不知道你想要通过访问画布完成什么。无论如何让我们开始工作:
ViewModel的一个示例:
function onBefore(current, previous) {
if (!CliendDateTimeUtils.validateCalendarDate(current.start_date)) {
current.setAbortAction(true); // Don't save the record
gs.addErrorMessage("Start date is not valid"); // Add an error message for the user
}
}
简单的命令就在这里:
public class ViewModel : DependencyObject
{
public ICommand ChangeWidthCommand { get; set; }
public int CanvasWidth
{
get { return (int)GetValue(CanvasWidthProperty); }
set { SetValue(CanvasWidthProperty, value); }
}
// Using a DependencyProperty as the backing store for CanvasWidth. This enables animation, styling, binding, etc...
public static readonly DependencyProperty CanvasWidthProperty =
DependencyProperty.Register("CanvasWidth", typeof(int), typeof(ViewModel), new PropertyMetadata(0));
public ViewModel()
{
ChangeWidthCommand = new ChangeWidthCommand(this);
}
}
这可能是你的Canvas定义:
public class ChangeWidthCommand : ICommand
{
ViewModel vm { get; set; }
public ChangeWidthCommand(ViewModel _vm)
{
vm = _vm;
}
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
vm.CanvasWidth += 10;
}
}
那我到底在做什么呢?只需通过该自定义命令访问Window类外部的画布,以便在单击按钮时更改其宽度。
确实没什么大不了的,只需发送模型作为命令的参考。您可以选择在Command类实现中定义一些委托,并在构造函数中将方法名称作为params发送。
我想今晚就是这样。玩得开心!