【问题标题】:Why Canvas wpf doesn't detect click?为什么 Canvas wpf 不检测点击?
【发布时间】:2014-05-20 20:26:11
【问题描述】:

这是我的 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>

...这是我的 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();
}

问题:

  1. 即使我单击画布,事件也没有触发。我想知道为什么?有什么我错过的吗?
  2. 在这段代码中,我没有包含任何画布边距,但是由于我以后要使用边距,是否需要在单击位置加上边距才能得到正确的值?

谢谢。

【问题讨论】:

    标签: c# wpf canvas mouseevent


    【解决方案1】:

    Canvas 永远不会根据内容自动调整其大小,即使这样做了它也没有内容,因此请删除 Height="Auto" 并让它填满所有可用空间。第二个问题是CanvasBackground 不会被初始化(默认空值),因此它不会被命中测试可见。您需要将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>
    

    编辑

    关于第二个问题。当您执行GetPosition 时,您指定相对于哪个元素(在您的情况下您传递cnv),因此如果您更改cnv 上的Margin,它会将您的位置返回到区域的左上角Canvas。您可以通过将MarginBackground 更改为红色来测试它,例如Canvas 并单击红色矩形的左上角和Mouse.GetPosition(cnv) 将始终返回接近零的值(无论余量是多少)

    【讨论】:

    • 效果很好。但是,第二个问题呢?我会在第二个回答后接受您的回答,谢谢。
    • 完美!只是为了确保因为有另一篇文章说保证金很重要。也许那是另一个不同的情况。
    【解决方案2】:

    可能有问题

    Height="Auto"
    

    行的属性。您可以尝试将每个高度设置为 175 并判断是否有帮助吗?

    【讨论】:

    • 是的,它有帮助。但有一个比你更全面的答案。还是谢谢你。
    猜你喜欢
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2016-06-21
    • 2011-06-15
    相关资源
    最近更新 更多