WPF 使用Uri读取文件

Dear200892 2020-04-10 10:22:33

最近在学习WPF自定义控件,想能够读取某个路径下的XAML文件

框架里的Layout我后面会生成dll文件,Demo是我的测试程序。
Demo的bin文件夹我打算存放各类型的资源文件。

现在我想使用 Application.LoadComponent(uri)读取资源文件。
问题是方法里的URI是相对路径,我配置的总是找不到路径下的资源文件。
求教大神!!!
...全文
347 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear200892 2020-04-14
引用 18 楼 轻箬笠 的回复:
最近在学WPF,有点头大,市场需求好少,但是公司项目需要。
上手还好
回复
轻箬笠 2020-04-14
最近在学WPF,有点头大,市场需求好少,但是公司项目需要。
回复
Dear200892 2020-04-14
引用 20 楼 z792623428 的回复:
我也遇到类似的问题,先mark一下~
目前还没有找到用相对路径读取bin文件夹里的资源文件
回复
desperaso 2020-04-13
另,微信等在电脑上,输入框回车也是其他功能的
回复
desperaso 2020-04-13
引用 15 楼 Dear200892 的回复:
聊天气泡这个软件我之前下载过,我觉得文本框应该能够换行,输入表情,光标还是在文字后面

换行是因为把回车屏蔽掉了,去掉即可,屏蔽还有粘贴功能。光标移动代码注销了,上面有/**/部分,需要就加上了
回复
Dear200892 2020-04-13
引用 14 楼 desperaso 的回复:
可能思路不一样吧,希望能帮到你。 做个控件,写个cs文件就完事,比如 https://blog.csdn.net/desperaso/article/details/105340757 组件添加功能也就一些函数,比如 修改richtextbox的 https://blog.csdn.net/desperaso/article/details/105482979 修改textbox的 https://blog.csdn.net/desperaso/article/details/105364805 样式什么的上面说过了。 参考,希望能帮到
聊天气泡这个软件我之前下载过,我觉得文本框应该能够换行,输入表情,光标还是在文字后面
回复
desperaso 2020-04-13
可能思路不一样吧,希望能帮到你。
做个控件,写个cs文件就完事,比如
https://blog.csdn.net/desperaso/article/details/105340757
组件添加功能也就一些函数,比如
修改richtextbox的 https://blog.csdn.net/desperaso/article/details/105482979
修改textbox的 https://blog.csdn.net/desperaso/article/details/105364805
样式什么的上面说过了。
参考,希望能帮到
回复
Dear200892 2020-04-13
引用 9 楼 exception92 的回复:
相对路径不需要带有component前缀,直接定位到包含文件的文件夹,前提文件已被生成并复制到相应文件夹。另一种是文件作为资源调用,嵌入到exe中的资源。可以查一下区分
bin文件下的资源文件可以用相对路径?
回复
desperaso 2020-04-13
接上面,我是这么搞的https://blog.csdn.net/desperaso/article/details/105457489
回复
desperaso 2020-04-13
引用 10 楼 Dear200892 的回复:
你的这个方法能找到bin文件夹下的资源文件?

放哪里不都一样么,只要拖到方案里面,把bin文件夹拖到工程方案里面。
如果外部调用,就是xaml明码文件和exe文件在一起给用户,就读取本地,csdn上有,搜一下
回复
Dear200892 2020-04-13
引用 8 楼 desperaso 的回复:
接上面,调用 Style myStyle = (Style)this.FindResource("for_scrollviewer"); // 里面的key值 组件.Style = myStyle;
你的这个方法能找到bin文件夹下的资源文件?
回复
exception92 2020-04-11
相对路径不需要带有component前缀,直接定位到包含文件的文件夹,前提文件已被生成并复制到相应文件夹。另一种是文件作为资源调用,嵌入到exe中的资源。可以查一下区分
回复
desperaso 2020-04-11
接上面,调用
Style myStyle = (Style)this.FindResource("for_scrollviewer"); // 里面的key值
组件.Style = myStyle;
回复
desperaso 2020-04-11
引用 6 楼 Dear200892 的回复:
我的核心是如何写出相对路径



好吧,这样的么
var foo = new Uri("pack://application:,,,/Style/ScrollViewer.xaml", UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = foo });
回复
desperaso 2020-04-10
接上面,路径啥的不是问题。读取的xaml,是个什么东西,组件还是模板还是style什么的,改改public object XamlToObj(string xaml)用这个吧
回复
desperaso 2020-04-10
uri -- pack://application:,,,。。。。。。。。。。

文件
把文件拖到工程里
app.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/路径/xxxxxxxxx.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>


或者...... 读文件的忘了baidu查下,读string的
public object XamlToObj(string xaml)
{
string strXaml = xaml;
StringReader strreader = new StringReader(strXaml);
XmlTextReader xmlreader = new XmlTextReader(strreader);
object obj = XamlReader.Load(xmlreader);
return obj;
}
回复
Dear200892 2020-04-10
引用 2 楼 杀马特丶蛮牛 的回复:
System.Environment.CurrentDirectory机上你的相对路径
uri只能读取相对路径,不然没办法读取
回复
System.Environment.CurrentDirectory机上你的相对路径
回复
Dear200892 2020-04-10
引用 5 楼 desperaso 的回复:
接上面,路径啥的不是问题。读取的xaml,是个什么东西,组件还是模板还是style什么的,改改public object XamlToObj(string xaml)用这个吧
我的核心是如何写出相对路径
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.