小编Cle*_*ens的帖子

将LayoutTransform设置为TranslateTransform或MatrixTransform时,Canvas子的翻译无法正常工作

我有一个简单的应用程序,包含一个包含Canvas(rootCanvas)的窗口.我试图添加另一个Canvas(测试)并将不同的变换应用于子画布的LayoutTransform.这都是以编程方式完成的,而不是使用XAML.

有些转型正在发挥作用,而其他转型则不如下:

  • 当LayoutTranform设置为RotateTransform时,它按预期工作.
  • 当它设置为TranslateTransform时,似乎没有应用转换,并且测试Canvas仍然位于rootCanvas的顶角
  • 当它设置为通过应用旋转然后平移而构造的MatrixTransform时,仅显示应用旋转.

代码如下:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Canvas rootCanvas = (Canvas)Application.Current.Windows[0].FindName("canvas1");

        Canvas test = new Canvas();
        test.Width = 10;
        test.Height = 10;
        test.Background = Brushes.Aqua;

        // this works 
        //test.LayoutTransform = new RotateTransform(45);

        // this doesn't
        //test.LayoutTransform = new TranslateTransform(40, 40);

        // only the rotate part of this works
        Matrix matrix = new Matrix();
        matrix.Rotate(45);
        matrix.Translate(40, 40);
        test.LayoutTransform = new MatrixTransform(matrix);

        rootCanvas.Children.Add(test);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人能解释我在这里做错了什么,我将非常感激,因为我不明白为什么翻译似乎没有像我期望的那样起作用.

提前致谢,

Wibbs

wpf layouttransform

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

Storyboard DoubleAnimation不适用于StackPanel高度属性

我正在尝试使用DoubleAnimation来更改StackPanel的Height属性.代码不会抛出任何异常.但动画不起作用.

            <StackPanel x:Name="FlyoutContent">

                <StackPanel.Resources>
                    <Storyboard x:Name="HideStackPanel">
                        <DoubleAnimation Storyboard.TargetName="ChangePasswordPanel" Storyboard.TargetProperty="Height" From="190" To="0" Duration="0:0:1">
                            <DoubleAnimation.EasingFunction>
                                <PowerEase EasingMode="EaseIn"></PowerEase>
                            </DoubleAnimation.EasingFunction>
                        </DoubleAnimation>
                    </Storyboard>
                    <Storyboard x:Name="ShowStackPanel">
                        <DoubleAnimation Storyboard.TargetName="ChangePasswordPanel" Storyboard.TargetProperty="Height" From="0" To="190" Duration="0:0:1">
                            <DoubleAnimation.EasingFunction>
                                <PowerEase EasingMode="EaseIn"></PowerEase>
                            </DoubleAnimation.EasingFunction>
                        </DoubleAnimation>
                    </Storyboard>
                </StackPanel.Resources>

                <TextBlock Margin="0, 20, 0, 0" FontWeight="Bold" Text="Change Current Password" TextWrapping="Wrap" Style="{StaticResource BasicTextStyle}" HorizontalAlignment="Left" IsTapEnabled="True" Tapped="ChangePasswordHeader_Tapped"/>
                <StackPanel x:Name="ChangePasswordPanel" Margin="0, 5, 0, 0" Height="0">
Run Code Online (Sandbox Code Playgroud)

C#事件处理程序

private void ChangePasswordHeader_Tapped(object sender, TappedRoutedEventArgs e)
{
    if (ChangePasswordPanel.Height == 0)
    {
        ShowStackPanel.Begin();
    }
    else
    {
        HideStackPanel.Begin();
    }
}
Run Code Online (Sandbox Code Playgroud)

它确实命中了ChangePasswordHeader_Tapped事件处理程序,并按预期执行ShowStackPanel.Begin或HideStackPanel.Begin语句.但它对输出没有任何影响.StackPanel的高度保持为0.

什么发生了什么?

c# xaml windows-8 windows-runtime

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

相对 URI 在 BitmapImage 中不起作用

我有一种通过绑定加载图像供以后使用的方法。

当我按如下方式设置它时,它可以工作:

public static ImageSource LoadImage()
{
    return new BitmapImage(
        new Uri("C:/User/Name/Documents/Visual Studio 2015/Projects/Project/bin/debug/subfolder/sprite.png", UriKind.Absolute));
}
Run Code Online (Sandbox Code Playgroud)

但是,当我切换到简单地使用时:

public static ImageSource LoadImage()
{
    return new BitmapImage(
        new Uri("/subfolder/sprite.png", UriKind.Relative));
}
Run Code Online (Sandbox Code Playgroud)

XAML 不显示图像。我看了看Environment.CurrentDirectory它又回来了"C:/User/Name/Documents/Visual Studio 2015/Projects/Project/bin/debug/"

我已经用谷歌搜索了一个解决方案,但似乎什么也看不到。

c# wpf xaml

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

System.Drawing.Icon 不存在

我正在尝试从这样的流中创建一个图标,例如:

System.IO.Stream iconStream = Application.GetResourceStream(new Uri("pack://application:,,,/YourReferencedAssembly;component/YourPossibleSubFolder/YourResourceFile.ico")).Stream;
Run Code Online (Sandbox Code Playgroud)

然后,当我尝试像这样分配它时,它在绘图中没有图标的概念,我尝试添加引用,但仍然没有:

tbi.Icon = new System.Drawing.Icon(iconStream);
Run Code Online (Sandbox Code Playgroud)

在顶部有这个:

using System.Drawing;
Run Code Online (Sandbox Code Playgroud)

这是错误:

错误 1 ​​命名空间“System.Drawing”中不存在类型或命名空间名称“Icon”(您是否缺少程序集引用?)

我真的很困惑,我很感激任何关于我必须忘记添加的简单事情的想法。

wpf

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

在 UI 元素上方的特定位置显示弹出按钮

我有 gridView,它的项目非常简单,每个 gridViewItem 上都有按钮。在此按钮上单击我想显示一个与 gridViewItem 内容相同的浮出控件,但也显示更多数据。这一切都很简单,但我想将弹出窗口放置在 gridViewItem 上方,以使其显示的项目与 gridViewItem 项目的位置完全相同。

此技术用于 Windows 10 的应用商店应用程序。当看到用户对应用程序的评论时。单击“更多”会显示该弹出窗口。

在此输入图像描述

c# xaml gridview popup uwp

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

如何在 c# 项目的 TFS 上获取旧版本并对其进行编辑并检查旧版本中的编辑?

我正在处理 WPF c# 项目,我需要获取特定版本并对其进行编辑,然后使用我的编辑签入整个旧版本。

我要做的是从 TFS 获得特定版本然后进行编辑然后当签入时我发现最新的文件在签入之前再次出现在我的签入版本中,我不需要它们我只需要完整的旧版本与我的编辑。请建议..

tfs changeset tfvc

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

如何从列表中删除第一项并保持索引

我有一个列表,并希望删除第一个项目,同时保持下一个项目的索引相同.例如:

public List<string> Fruit
{
    get
    {
        List<string> fruits = dataSource.GetFruits();

        return messageStatuses ;
    }
}
Run Code Online (Sandbox Code Playgroud)

结果返回

[0] -- apple
[1] -- grape
[2] -- orange
[3] -- peach
Run Code Online (Sandbox Code Playgroud)

删除第一项时,结果应为:

[1] -- grape
[2] -- orange
[3] -- peach
Run Code Online (Sandbox Code Playgroud)

c#

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

wpf字典绑定其中key = variable

我有一本测试词典

MyDict = new Dictionary<string, Uri>
{
    {"First", new Uri("alma.jpg", UriKind.Relative)},
    {"Second", new Uri("korte.jpg", UriKind.Relative)}
};
Run Code Online (Sandbox Code Playgroud)

和一个简单的XAML

<TextBlock Text="{Binding MyDict[First]}"
           FontSize="13" Width="200" Height="30" />
Run Code Online (Sandbox Code Playgroud)

这完美地显示了第一个关键元素Value

我想要的是我有一个字符串变量:DictKey让DictKey ="First"

如何重写XAML以使用此变量

<TextBlock Text="{Binding MyDict[???DictKey????]}"
           FontSize="13" Width="200" Height="30" />
Run Code Online (Sandbox Code Playgroud)

谢谢.

wpf binding dictionary

4
推荐指数
1
解决办法
6854
查看次数

绑定的好处?

我不确定我是否完全理解绑定的优点.例如,如果我想将字符串值绑定到TextBlock,我需要执行以下操作:

  1. 创建一个扩展INotifyPropertyChanged的类
  2. 在该类中添加一个字符串(例如:MyString)
  3. 扩展MyString的set方法,以便调用另一个方法(例如:OnPropertyChanged)
  4. 创建OnPropertyChanged方法以调用PropertyChangedEventHandler事件

然后我需要创建一个类的新实例,将我的TextBlock.DataContext设置为指向该类,最后为绑定添加XAML位.

有人可以解释这个优点而不是简单地设置:

TextBlock.Text = MyString;

谢谢!

wpf binding

4
推荐指数
1
解决办法
642
查看次数

即使文件夹已被删除,DirectoryInfo.Exists 也会返回 true

我正在创建一个临时文件夹,其中有一个文件夹,位于用户在应用程序启动时选择的文件夹中。我创建了一个删除按钮,当用户使用该应用程序时,它应该删除在其中创建的临时文件夹和文件。

我首先单击删除按钮并删除文件和文件夹,如果我再次单击删除按钮,DirectoryInfo.Exist 方法仍然返回 true,即使我作为参数输入的文件夹不再存在,并且由于它true 我收到一个错误,因为它试图删除一个不存在的文件夹。

我很感激任何帮助:)

C#

if (FilePaths.mainDirectory.Exists)
{
    if (DirectoryNotEmpty(FilePaths.mainDirectory.FullName))
    {
        if (DirectoryNotEmpty(FilePaths.actionDirectory.FullName))
        {
            foreach (var file in FilePaths.actionDirectory.GetFiles()) file.Delete();
        }
        Directory.Delete(FilePaths.actionDirectory.FullName);

        foreach (var file in FilePaths.mainDirectory.GetFiles()) file.Delete();
        Directory.Delete(FilePaths.mainDirectory.FullName);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 DirectoryInfo 对象的实例化

public static string mainFolder = "";
public static string actionFolder = "";
public static DirectoryInfo mainDirectory;
public static DirectoryInfo actionDirectory;

public static void CreateTemporaryFolders()
{
    if (mainFolder != "")
    {
        actionFolder = Path.Combine(mainFolder, "Action Files");

        mainDirectory = new DirectoryInfo(mainFolder);
        actionDirectory = new DirectoryInfo(actionFolder);
    } …
Run Code Online (Sandbox Code Playgroud)

c#

4
推荐指数
1
解决办法
65
查看次数