小编Han*_*ank的帖子

放大和平移ImageView Android

我为ImageView创建了一个缩放和平移类.

我想要创建的功能. - 它可以单手触摸和移动 - 它可以在两个手指触摸和移动时进行缩放和平移

在大多数情况下,这非常有效.当我执行以下操作时,它有一个小错误: - 我用一根手指平移(状态:没问题) - 我放下第二根手指,放大并平移(状态:没问题) - 我释放了我的第二根手指(状态:图像跳了一点)

希望有人可以帮我解决这个问题.

我认为必须在"case MotionEvent.ACTION_POINTER_UP"中重置mLastTouchX和mLastTouchY

任何帮助将不胜感激!

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.ImageView;

public class MyImageView extends ImageView {

    private static final int INVALID_POINTER_ID = -1;

    private float mPosX;
    private float mPosY;

    private float mLastTouchX;
    private float mLastTouchY;
    private float mLastGestureX;
    private float mLastGestureY;
    private int mActivePointerId = INVALID_POINTER_ID;

    private ScaleGestureDetector mScaleDetector;
    private float mScaleFactor = 1.f;

    public MyImageView(Context context, AttributeSet attrs) …
Run Code Online (Sandbox Code Playgroud)

android zoom pan pinch imageview

13
推荐指数
1
解决办法
2万
查看次数

如何测试窗口是否被拖动C#WPF

我有一个无标题的窗口,因为我想创建一个我自己的窗口样式.

标题和最小化,最大化和关闭按钮位于停靠面板中.我添加了以下事件处理程序来最大化,恢复和拖动窗口.

窗口最大化时出现问题.

我发现每当我单击标题时就会恢复.如果双击或拖动它我只想恢复它.我可以看到它为什么会发生但不确定如何解决这个问题.

    public void TITLEBAR_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        DockPanel dp = (DockPanel)sender;
        Window parentWindow = Window.GetWindow(dp);
        bool doubleClick = IsDoubleClick(sender, e);

        if (e.ChangedButton == MouseButton.Left && e.LeftButton == MouseButtonState.Pressed && !doubleClick)
        {


            if (parentWindow.WindowState == WindowState.Maximized)
            {
                double mouseX = e.GetPosition(parentWindow).X;
                double width = parentWindow.RestoreBounds.Width;
                System.Drawing.Rectangle screenBounds = getCurrentScreenBounds(parentWindow);
                double x = screenBounds.Left + (mouseX - ((width / 100.00) * ((100.00 / screenBounds.Width) * mouseX)));

                if (x < 0)
                {
                    x = 0;
                }
                else
                {
                    if …
Run Code Online (Sandbox Code Playgroud)

c# wpf

8
推荐指数
1
解决办法
1269
查看次数

UserControl如何判断它何时可见

我在MainWindow中有一个UserControl:

<ctrls:Login Visibility="{Binding DataContext.Vis,
                          RelativeSource={RelativeSource Mode=FindAncestor,
                                                          AncestorType=Window}},
                          Converter={StaticResource BooelanToVisibilityConverter}"/>
Run Code Online (Sandbox Code Playgroud)

所以它的可见性绑定到MainWindow的ViewModel中的属性Vis.

我想知道的是,在UserControl的ViewModel中,当可见性发生变化时,如何拾取?我希望在可见时启动计时器并在隐藏时停止计时器.

c# wpf xaml

7
推荐指数
1
解决办法
3321
查看次数

为什么DataGridRow IsSelected绑定不适用于DataGrid

在Josh Smith的MVVM演示中,他使用了ListViewItem样式的ListView,如下所示:

<Style x:Key="CustomerItemStyle" TargetType="{x:Type ListViewItem}">
    <Setter Property="IsSelected" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="ItemsControl.AlternationIndex" Value="1" />
                <Condition Property="IsSelected" Value="False" />
                <Condition Property="IsMouseOver" Value="False" />
            </MultiTrigger.Conditions>
            <Setter Property="Background" Value="#EEEEEEEE" />
        </MultiTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

它很好地绑定了IsSelected属性.该样式应用于ListView,如下所示:

<ListView  
  ItemContainerStyle="{StaticResource CustomerItemStyle}"
  ItemsSource="{Binding}"
  >
Run Code Online (Sandbox Code Playgroud)

我的版本

我尝试通过DataGridRow以类似的方式与DataGrid绑定IsSelected.但是,当通过项目ViewModel的集合选择项目时会导致问题,其中定义了IsSelected属性.

因为它使用双向绑定,我会认为可以通过UI和项目ViewModel的集合来选择项目.

假设我通过UI选择项目,这很好用.我可以选择单个项目,然后使用[shift]选择范围,然后使用[ctrl]选择更多项目.取消选择项也可以正常工作.

但是我通过集合选择了一堆.让我们说点击按钮(就像我在下面的代码中所做的那样),选择了一堆项目.当我向下滚动DataGrid时,会选择一些,因为它们应该是一些不是.如果我通过UI选择一个项目,那么只取消选择一些项目,一些项目仍然被选中,这一切都有点时髦.即使左上角的全选按钮也不能正确执行.

代码 所有代码都在下面,底部是视图,关键部分是带有IsSelected绑定的DataGridRow样式.

这是我的用户类:

using System.ComponentModel;

namespace WpfAppDataGrid.Model
{
    public class User : INotifyPropertyChanged
    {
        public static User CreateNewUser()
        {
            return new User();
        }

        public User() { }

        public int User_ID { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm wpfdatagrid

7
推荐指数
1
解决办法
4510
查看次数

在Android中映射空间数据

我有一个空间表,我想在Android中将其对象映射到画布上.这是在SpatiaLite数据库中.

我可以以SVG格式获取对象数据并从中创建地图,但效率不高.原始对象数据以blob格式保存.

我的问题是,GIS系统如何映射他们的数据.我想映射对象并能够触摸它们以提取它们的属性信息.

这是一个非常简单的问题,答案很大.但我只是在寻找一个可以开始的地方.

我不打算建立一个GIS系统,只是创建一些类似的功能.

任何信息将不胜感激.

java gis mapping android

6
推荐指数
1
解决办法
2237
查看次数

如何从XAML引用静态类字段

我有我的XAML引用的以下类:

public static class SearchVariables
{
    public static DataGridCellInfo current_cell_match;
    public static string current_cell_property;

    public static void setCurrentCell(Object dgi, DataGridColumn dgc, string property_name)
    {
        current_cell_property = property_name;
        if (property_name == null)
        {
            current_cell_match = new DataGridCellInfo();
        }
        else
        {
            current_cell_match = new DataGridCellInfo(dgi, dgc);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是设置一个MultiBinding Converter,它在更改时使用current_cell_match.我有以下但它抛出一个错误可以使用一些帮助来解决这个问题.

<Setter Property="helpers:SearchBehaviours.IsTextMatchFocused">
    <Setter.Value>
        <MultiBinding Converter="{StaticResource SelectedSearchValueConverter}" FallbackValue="False">
            <Binding Path="(helpers:SearchBehaviours.IsFindPopupOpen)" RelativeSource="{RelativeSource Self}"/>
            <Binding Path="(helpers:SearchVariables.current_cell_match)" />
        </MultiBinding>
    </Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)

[编辑]

应该已经提到过这个类带有一堆附加的属性和行为,所以它在UI的一面.其中一个行为设置current_cell_match.

c# wpf xaml multibinding

6
推荐指数
1
解决办法
4140
查看次数

使用交互触发器调用可见性更改方法 WPF

我想弄清楚的是两件事,如何在用户控件的可见性更改时触发触发器,以及如何将可见性的值作为参数传递。

无论出于何种原因,触发器似乎都没有触发。我刚刚添加了 ControlVisible 参数来显示我想要发生的事情,在测试时它不存在,并且只有一个消息框可以在可见性更改时捕获,如注释掉的方法中所示。

我在 Visual Studio 2010 中使用 4.0

包含用户控件的主窗口视图

<Window x:Class="bt.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:vm="clr-namespace:bt"
        xmlns:ctrls="clr-namespace:bt.Controls"
        xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
        xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
        mc:Ignorable="d">

    <Grid>
        <ctrls:Login Visibility="{Binding DataContext.Vis,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},Converter={StaticResource BooleanToVisibilityConverter}}" >
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="IsVisibleChanged">
                    <ei:CallMethodAction MethodName="VisibleTrigger" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </ctrls:Login>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

用户控件视图模型:

namespace bt.Controls
{
    class LoginViewModel
    {
        public LoginViewModel()
        {
        }

        public void VisibleTrigger(bool ControlVisible)
        {
            if (ControlVisible)
            {
                MessageBox.Show("Start timer");
            }
            else
            {
                MessageBox.Show("Stop timer");
            }
        }

        //public void VisibleTrigger()
        //{
        //    MessageBox.Show("Changed");
        //}
    }
}
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml

5
推荐指数
1
解决办法
2万
查看次数

如何在 UI 线程中工作时更新进度条

我有一个ProgressBar和一个TreeView

TreeView用一堆数据填充了 ,一旦应用它,我就会运行它,visual tree基本上TreeView迫使它生成每个TreeViewItems. 我想ProgressBar展示这是如何进展的。

这是我运行来创建TreeViewItems. ItemsLoaded一旦属性设置为 true,它就会开始处理项目。它依次更新单例类中的属性以更新进度。

public class TreeViewBehaviors
{
    public static readonly DependencyProperty ItemsLoadedProperty =
        DependencyProperty.RegisterAttached("ItemsLoaded", typeof(bool), typeof(TreeViewBehaviors),
        new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnItemsLoadedPropertyChanged)));

    public static bool GetItemsLoaded(DependencyObject obj)
    {
        return (bool)obj.GetValue(ItemsLoadedProperty);
    }

    public static void SetItemsLoaded(DependencyObject obj, bool value)
    {
        obj.SetValue(ItemsLoadedProperty, value);
    }

    private static void OnItemsLoadedPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        if ((bool)e.NewValue)
        {
            GetTotalNTreeViewItems((TreeView)sender, sender);
        }
    }

    public static readonly …
Run Code Online (Sandbox Code Playgroud)

c# wpf treeview

5
推荐指数
1
解决办法
4577
查看次数

如何实现 Cypress v10 session() 来保留最初不可用的 cookie

我正在 React 前端上运行 cypress v10,并尝试让我的 cookie 在我的一些测试中持续存在。

我正在测试登录和退出我的应用程序的流程。从 V10 开始,cy.session() 似乎是可行的方法。然而,我见过的大多数例子只是在 beforeEach() 的开头添加一个 cookie 到一个命名会话对象中。

我在测试模块开始时没有最初可用的 cookie,我创建了一些测试(如下所示),在使用 cookie 登录时进行更多测试,然后注销,删除 cookie。

所以我对如何将 session() 实现到以下代码的组合中有点困惑。可以使用一些结构方向,谢谢!

describe('Auth (e2e)', () => {
    
  it('should load and redirect to /login', () => {
    cy.visit('https://localhost:3000/');
    cy.wait(500);
    cy.url().should('include', 'login');
  });
    
  it('login button should be disabled initially', () => {
    cy.get('#btn-login').should('have.attr', 'disabled');
  });
    
  it('login button should be enabled upon enter valid details', () => {
    cy.get('#tbxUsername').click().type('hfisher');
    cy.get('#tbxPassword').click().type('#VS1DEV');
    cy.get('#btn-login').should('not.have.attr', 'disabled');
  });
    
  it('should navigate to the home/dashboard upon logging …
Run Code Online (Sandbox Code Playgroud)

cookies reactjs cypress cypress-session

5
推荐指数
1
解决办法
878
查看次数

如何在同一个Slice中从Reducer方法调用AsyncThunk方法

我有一个使用 reduxjs/toolkit 的切片,状态包含一个 ServiceRequest 对象和一个 ServiceRequest 数组。

我想要实现的是;在加载组件时,我想分派对减速器的调用,该减速器通过 id 检查 ServiceRequest 是否已存在于数组中,如果存在,则使用找到的对象填充 ServiceRequest,如果不存在,则调用同一中的 AsyncThunk 方法切片以从 WebAPI 检索它。

我无法弄清楚是从reducer 或reducer 方法内部调用AsyncThunk 方法。也许不应该这样做,但这似乎是一个将所有东西放在一起的好地方。

我怎样才能实现这个目标?

这就是我到目前为止所拥有的:(您会看到我认为应该调用 AsyncThunk 方法的地方已被注释掉)

import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit";
import { ServiceRequest } from "./models/ServiceRequest.interface";
import csmRequestDataService from "./services/csmRequestDataService";

interface AsyncState {
  isLoading: boolean;
  isSuccess: boolean;
  isError: boolean;
}

interface CSMState extends AsyncState {
  serviceRequest: ServiceRequest | null;
  serviceRequests: ServiceRequest[];
}

const initialState: CSMState = {
  isLoading: false,
  isSuccess: false,
  isError: false,
  serviceRequest: null,
  serviceRequests: [], …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs redux react-redux redux-toolkit

5
推荐指数
1
解决办法
785
查看次数