我有一个自定义组件项目,我从另一个项目中引用。
我需要在自定义组件的页面之间导航,因此我正在使用此代码:
var frame = Application.Current.RootVisual as PhoneApplicationFrame;
frame.Navigate(new Uri("/CustomComponent;component/Page.xaml", UriKind.Relative));
现在,只要我的自定义组件具有如下结构:
Root Folder
\_ Page.xaml
\_ Folder A
\_ BaseClass.cs
\_ Folder B
\_ Folder C
\_ Class.cs (extends BaseClass)
\_ Page2.xaml
我想在Class.cs
内调用一个方法,该方法返回一个字符串,允许我使用我发布的导航代码导航到Page2.xaml
。
所以,这个方法应该返回
/ CustomComponent;组件/文件夹B /文件夹C / Page2.xaml
(/CustomComponent;component/
是可选的,但是我需要它来返回正确的文件夹结构以导航到页面)
我一直在尝试使用Directory
类,但GetCurrentDirectory()
方法返回并指向应用程序安装文件夹的绝对路径,我需要它是一个遵循组件结构的相对路径。
答案 0 :(得分:0)
这是一个获取调用函数的绝对路径的函数:
public static string GetFilePathLoc([CallerFilePath] string filePath = "")
{
return filePath;
}
您可以发布进程以仅提取相对部分,例如通过创建RootClass并从它和Class1中调用GetFilePathLoc:
public abstract class BaseClass
{
public string GetResourceFilePath()
{
string assemblyName = Assembly.GetExecutingAssembly().FullName;
assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(','));
string myFilePath = GetRealClassPath();
//If base class is in the root directory, this could just be replaced by string projectFolder = GetFilePathLoc();
string projectFolder = RootClass.GetPath();
//Remove the "absolute part" of the path
myFilePath = myFilePath.Substring(projectFolder.Length);
myFilePath=myFilePath.Replace('\\', '/');
return "/" + assemblyName + ",component/" + myFilePath;
}
protected abstract string GetRealClassPath();
protected static string GetFilePathLoc([CallerFilePath] string filePath = "")
{
int indexFileName= filePath.LastIndexOf('\\');
return filePath.Substring(0, indexFileName+1);
}
}
public class Class1 :BaseClass
{
protected override string GetRealClassPath()
{
return GetFilePathLoc();
}
}