用拇指拖动wpf窗口:可以透明吗?

问题描述 投票:0回答:3

我一直在测试Blu,我注意到我可以拖动窗口。这个窗口是透明的。我尝试用拇指做同样的事情,但我不知道如何使其透明。窗口的其余部分是透明的,但拇指不是。

有没有办法让拇指透明,或者我应该使用其他技术?

我使用这个事件:

 private void DragThumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
    {
        Canvas.SetLeft(this, Canvas.GetLeft(this) + e.HorizontalChange);
        Canvas.SetTop(this, Canvas.GetTop(this) + e.VerticalChange);
    }

谢谢你

wpf slider drag
3个回答
8
投票

您可以使用不透明度属性将拇指控件设为不可见。

不透明度=“1”(完全可见)

不透明度=“0”(不可见)

我的申请样本

        <Thumb Name="myThumb"
               Width="10"
               Height="10"
               DragDelta="onDragDelta"
               DragStarted="onDragStarted"
               DragCompleted="onDragCompleted"
               Margin="5"
               HorizontalAlignment="Right"
               Opacity="1">

        </Thumb>

5
投票

不确定我是否正确理解您的问题,但是要拖动 wpf 窗口,您需要在表单(或表单本身)上的组件的单击事件处理程序中键入:

this.DragMove();

无需自己实现拖动功能。


更新:小示例:创建一个窗口,在其中放置一个按钮。将窗口的 MouseDown 和按钮的 Click 连接如下:

    private void Window_MouseDown(object sender, MouseButtonEventArgs e)
{
    this.DragMove();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show("hey");
}

工作完美,可以拖动窗口,按钮继续工作...


0
投票

您可以选择将Thumb控件的控件模板设置为“透明”,如下代码片段:

<Canvas Background="LightGray">
    <Grid Canvas.Left="451" Canvas.Top="148" Width="120" Height="120" Background="Red">
        <Thumb DragDelta="Thumb_DragDelta" Cursor="SizeAll"
               DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}}">
            <Thumb.Template>
                <ControlTemplate>
                    <Grid>
                        <Ellipse Fill="Black" Width="10" Height="10" HorizontalAlignment="Left" VerticalAlignment="Top"/>
                        <Rectangle Fill="Transparent" />
                    </Grid>
                </ControlTemplate>
            </Thumb.Template>
        </Thumb>
        <Ellipse Fill="Pink" Height="100" Width="100" IsHitTestVisible="False" />
    </Grid></Canvas>

DragDelta 事件:

private void Thumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
    var thumb = (System.Windows.Controls.Primitives.Thumb)sender;
    var grid = (Grid)(thumb.DataContext);
    if (grid == null) return;
    var left = Canvas.GetLeft(grid);
    var top = Canvas.GetTop(grid);
    Canvas.SetLeft(grid, left + e.HorizontalChange);
    Canvas.SetTop(grid, top + e.VerticalChange);
}

© www.soinside.com 2019 - 2024. All rights reserved.