我正在尝试使用本地资源在Button中放置一个图标.(C#Visual Studio 2012)
直接在我的项目中,我有一个名为"Resources"的文件夹,其中包含"Icons/MyIcon.png"
以下代码有效(但不使用相对路径)
<Button Width="20" Height="20">
<Button.Background>
<ImageBrush ImageSource="C:\Documents\MyProject\Resources\Icons\MyIcon.png">
</ImageBrush>
</Button.Background>
Run Code Online (Sandbox Code Playgroud)
但是,我希望它使用相对路径...所以我尝试了以下
<ImageBrush ImageSource="..\MyProject\Resources\Icons\MyIcon.png">
Run Code Online (Sandbox Code Playgroud)
它编译,但然后给我错误:
{"Cannot locate resource 'myproject/resources/icons/myicon.png'."}
Run Code Online (Sandbox Code Playgroud)
然后我发现了一篇文章,谈到引用该项目,并说:
"/[ assembly name ];component[ path within the project ]"
Run Code Online (Sandbox Code Playgroud)
所以我试过了:
<ImageBrush ImageSource="/MyProject;component\Resources\Icons\MyIcon.png">
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
它会出现在GUI-Builder中...但是当我真正尝试"调试"代码时......它无法运行.
如果我通过添加'123'来改变路径,例如:
<ImageBrush ImageSource="/MyProject;component\Resources\Icons\MyIcon123.png">
Run Code Online (Sandbox Code Playgroud)
我得到一个预编译错误:"找不到指定的文件".一旦我删除'123',错误就会消失.并再次在图表中显示图标.但当我跑...我仍然得到:
{"Cannot locate resource 'resources/icons/myicon.png'."}
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?为什么它只能在运行之前找到资源?而不是当我真正开始?
我有这个复杂的代码库,它正在侦听某个文件夹上的FileCreated事件.当文件被创建(其中还包括将文件移动到该文件夹)时,我想读取该文件并对其执行某些操作.它适用于第一个文件,但在所有其他尝试之后抛出异常.在调试模式下(使用VisualStudio),将抛出错误,但如果我只是单击"继续"..它将工作(没有错误).
我发布了简化代码,它证明了这个问题.
例如,启动应用程序,单击"开始"按钮,然后"创建新的文本文件"
输出是:
Working
Run Code Online (Sandbox Code Playgroud)
如果您以完全相同的方式创建2ed文件,则输出为:
Broken: The process cannot access the file 'C:\TestFolder\New Text Document (2).txt' because it is being used by another process.
Working, after breaking
Run Code Online (Sandbox Code Playgroud)
在查看我的代码之后,您将看到上面的打印输出意味着首先抛出了"无法访问文件"异常,但是在catch语句中执行相同的调用突然起作用.
这是没有意义的我,因为文件显然没有使用别的(我只是创造了它)..和它的作品一秒钟后,无论如何....
XAML:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" >
<StackPanel>
<Button Click="Button_Click" Content="Start"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
代码背后:
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e) …Run Code Online (Sandbox Code Playgroud) 我有一个C++ Dll"TheFoo.dll",方法是"Foo()"
我可以通过简单地调用以下方法访问使用此方法的其他C++代码:
Foo();
Run Code Online (Sandbox Code Playgroud)
我相信该方法确实具有:
__declspec( dllexport )
Run Code Online (Sandbox Code Playgroud)
所以,随着我对P/Invoke的阅读,我想我应该能够简单地从我的C#代码中调用相同的方法:
namespace PInvokeExample1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
[DllImport(@"C:\MyFolder\TheFoo.dll")]
public static extern
void Foo();
private void button1_Click(object sender, RoutedEventArgs e)
{
Foo();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到一个错误:
Unable to find an entry point named 'Foo' in DLL 'C:\MyFolder\TheFoo.dll'.
Run Code Online (Sandbox Code Playgroud)
任何想法为什么没有找到?
我想将RibbonWindow的标题居中,而不是让它在侧面对齐.
这个帖子说它有一个答案: 通过XAML Code中心WPF RibbonWindow标题
但它不起作用.
贝娄是一个图像和相应的代码.

<RibbonWindow x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Ribbon>
<Ribbon.TitleTemplate>
<DataTemplate>
<TextBlock TextAlignment="Center" HorizontalAlignment="Stretch" Width="{Binding ElementName=Window, Path=ActualWidth}">ApplicationTitle
<TextBlock.Effect>
<DropShadowEffect ShadowDepth="0" Color="MintCream " BlurRadius="10" />
</TextBlock.Effect>
</TextBlock>
</DataTemplate>
</Ribbon.TitleTemplate>
</Ribbon>
</Grid>
</RibbonWindow>
Run Code Online (Sandbox Code Playgroud)
我正在使用VS 2012,.NET 4.5和附带的System.Windows.Controls.Ribbon程序集.