Mos*_*ico 1 c# wpf canvas mouseevent
这是我的 XAML
<Window x:Class="Drawing.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Height="25" IsEnabled="False" Name="txt"/>
<Canvas Name="cnv" MouseLeftButtonDown="cnv_MouseLeftButtonDown" Grid.Row="1"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
...这是我的 C# 代码
private void cnv_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point p = Mouse.GetPosition(cnv);
p.X += cnv.Margin.Left;
p.Y += cnv.Margin.Top;
txt.Text = p.ToString();
}
Run Code Online (Sandbox Code Playgroud)
问题 :
谢谢。
Canvas永远不会根据内容自动调整其大小,即使它这样做,您的案例中也没有内容,因此请删除Height="Auto"并让它填充所有可用空间。第二个问题是Background不会Canvas被初始化(默认空值),因此它不会在命中测试中可见。您需要初始化Background一些东西,Transparent例如
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Height="25" IsEnabled="False" Name="txt"/>
<Canvas Name="cnv" MouseLeftButtonDown="cnv_MouseLeftButtonDown" Grid.Row="1" Background="Transparent"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
编辑
至于第二个问题。当您这样做时,GetPosition您指定相对于哪个元素(在您的情况下您传递cnv),因此如果您要更改Margin它cnv会将您的位置返回到 区域的左上角Canvas。Margin您可以通过将和更改为红色来测试它Background,例如,Canvas单击红色矩形的左上角,并且Mouse.GetPosition(cnv)始终返回接近于零的值(无论边距是多少)
| 归档时间: |
|
| 查看次数: |
6843 次 |
| 最近记录: |