我有一个简单的应用程序,包含一个包含Canvas(rootCanvas)的窗口.我试图添加另一个Canvas(测试)并将不同的变换应用于子画布的LayoutTransform.这都是以编程方式完成的,而不是使用XAML.
有些转型正在发挥作用,而其他转型则不如下:
代码如下:
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
我正在尝试使用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.
什么发生了什么?
我有一种通过绑定加载图像供以后使用的方法。
当我按如下方式设置它时,它可以工作:
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/"
我已经用谷歌搜索了一个解决方案,但似乎什么也看不到。
我正在尝试从这样的流中创建一个图标,例如:
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”(您是否缺少程序集引用?)
我真的很困惑,我很感激任何关于我必须忘记添加的简单事情的想法。
我有 gridView,它的项目非常简单,每个 gridViewItem 上都有按钮。在此按钮上单击我想显示一个与 gridViewItem 内容相同的浮出控件,但也显示更多数据。这一切都很简单,但我想将弹出窗口放置在 gridViewItem 上方,以使其显示的项目与 gridViewItem 项目的位置完全相同。
此技术用于 Windows 10 的应用商店应用程序。当看到用户对应用程序的评论时。单击“更多”会显示该弹出窗口。
我正在处理 WPF c# 项目,我需要获取特定版本并对其进行编辑,然后使用我的编辑签入整个旧版本。
我要做的是从 TFS 获得特定版本然后进行编辑然后当签入时我发现最新的文件在签入之前再次出现在我的签入版本中,我不需要它们我只需要完整的旧版本与我的编辑。请建议..
我有一个列表,并希望删除第一个项目,同时保持下一个项目的索引相同.例如:
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) 我有一本测试词典
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)
谢谢.
我不确定我是否完全理解绑定的优点.例如,如果我想将字符串值绑定到TextBlock,我需要执行以下操作:
然后我需要创建一个类的新实例,将我的TextBlock.DataContext设置为指向该类,最后为绑定添加XAML位.
有人可以解释这个优点而不是简单地设置:
TextBlock.Text = MyString;
谢谢!
我正在创建一个临时文件夹,其中有一个文件夹,位于用户在应用程序启动时选择的文件夹中。我创建了一个删除按钮,当用户使用该应用程序时,它应该删除在其中创建的临时文件夹和文件。
我首先单击删除按钮并删除文件和文件夹,如果我再次单击删除按钮,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)