我正在尝试将现有的C#-WPF-Project移植为iPad-App.
据我所知,最好的方法是使用MonoTouch并尽可能多地重用C#-Logic.
由于原始项目是用WPF编写的,用于实际的TabletPC,我的问题是,如果有任何办法,重用WPF源或至少最小化我必须再次编写的部分.
如果有任何MonoTouch的好选择,我会很感激提示:)
更新:您的评论很有帮助,但不是我想要的100%.MonoCross看起来很不错,但据我所知,它只是"隐藏"了iOS特定的部分.我真正喜欢的是一种重用手写的"特殊"WPF控件的方法.(或者至少最小化转移它们的工作/时间.)这将是非常棒的.
更新2:也许我应该补充一点,我也会接受一些"复杂的"三步技术.例如,有没有办法将XAML-WPF文件转换为HTML5(或同样强大的东西),然后使用Titanium或PhoneGap?语言和框架应该不是大问题,我只是想尽可能地找到一种方法来重用:)
我试图在excel-spreadsheet中获取单元格的backgroundcolor.我正在使用Open XML 2.0 SDK,我可以打开*.xlsx文件并获取单元格值.我获取Background-Color的代码如下:
public BackgroundColor GetCellBackColor(Cell theCell, SpreadsheetDocument document)
{
BackgroundColor backGroundColor = null;
WorkbookStylesPart styles = SpreadsheetReader.GetWorkbookStyles(document);
int cellStyleIndex = (int)theCell.StyleIndex.Value;
CellFormat cellFormat = (CellFormat)styles.Stylesheet.CellFormats.ChildElements[cellStyleIndex];
Fill fill = (Fill)styles.Stylesheet.Fills.ChildElements[(int)cellFormat.FillId.Value];
backGroundColor = fill.PatternFill.BackgroundColor;
return backGroundColor;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,PatternFill.BackgroundColor这只返回一个自然数,我认为它是风格的id.我的问题是,那行代码
DocumentFormat.OpenXml.Spreadsheet.Color c = (DocumentFormat.OpenXml.Spreadsheet.Color)styles.Stylesheet.Colors.ChildElements[Int32.Parse(backGroundColor.InnerText)];
Run Code Online (Sandbox Code Playgroud)
一个错误返回,因为Stylesheet.Colors是null......也许是因为我使用了"中建"颜色在Excel中-而不是一个自定义的颜色?
我有什么想法可以"计算""backGroundColor-Value"中的真实颜色数?
我现在正在学习WPF和MVVM(或者至少我正在尝试......).
我创建了一个小样本应用程序,它显示了一个带有2个按钮的窗口,每个按钮都应显示一个新的View on Click.所以我创建了3个UserControls(带有2个按钮的DecisonMaker,以及每个"clicktarget"的一个Usercontrol).
所以我将MainWindow的CotentControl绑定到我的MainWindowViewModel中名为"CurrentView"的属性
MainWindow.xaml代码:
<Window x:Class="WpfTestApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfTestApplication"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
<Grid>
<ContentControl Content="{Binding CurrentView, Mode=OneWay}" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
MainWindowViewModel的代码:
class MainWindowViewModel
{
private UserControl _currentView = new DecisionMaker();
public UserControl CurrentView
{
get { return _currentView; }
set { _currentView = value; }
}
public ICommand MausCommand
{
get { return new RelayCommand(LoadMouseView); }
}
public ICommand TouchCommand
{
get { return new RelayCommand(LoadTouchView); }
}
private void LoadMouseView()
{
CurrentView = …Run Code Online (Sandbox Code Playgroud) 我正在开始一个新项目,并将我的项目结构定位在这个问题中推荐的结构上.
现在我看到了奇怪的行为.当我在View-XAML中设置datacontext时,在运行时找不到它(获得a XamlParseException).当我在codebehind-file的构造函数中设置它时,一切正常.
这是使用不同程序集时的官方(记录)行为,还是我做错了什么?
代码:
不工作:
MainView.xaml:
<UserControl x:Class="ViewsRoot.Views.MainView"
xmlns:baseControls="clr-namespace:BaseControls;assembly=BaseControls"
xmlns:viewModels="clr-namespace:ViewModelsRoot;assembly=ViewModelsRoot">
<UserControl.DataContext>
<viewModels:ShellViewModel />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)
MainView.xaml.cs
public MainView()
{
InitializeComponent();
// No DataContext set in codebehind-file
}
Run Code Online (Sandbox Code Playgroud)
工作:
MainView.xaml:
<UserControl x:Class="ViewsRoot.Views.MainView"
xmlns:baseControls="clr-namespace:BaseControls;assembly=BaseControls"
xmlns:viewModels="clr-namespace:ViewModelsRoot;assembly=ViewModelsRoot">
<!--<UserControl.DataContext>
<viewModels:ShellViewModel />
</UserControl.DataContext> -->
Run Code Online (Sandbox Code Playgroud)
MainView.xaml.cs:
public MainView()
{
InitializeComponent();
DataContext = new ViewModelsRoot.ShellViewModel();
}
Run Code Online (Sandbox Code Playgroud)
更新:
例外文本是:
{"文件或程序集\"ViewModelsRoot,PublicKeyToken = null \"或其中一个依赖项未找到.系统找不到指定的文件."}
我能看到的唯一内部例外是System.IO.FileNotFoundException.
更新2:
感谢您的评论,但我没有忘记命名空间.我在这里缩短了它以显示代码,但我加倍并且重复检查(再次).DataContexts命名空间也由intellisense填充.整体<viewModels:ShellViewModel />是由智能写的.所以它在设计时被发现......所以更多的想法?
更新3: xaml被"正确"解析,因为我能够将DataContext绑定到同一程序集中的类.
我有一个WPF窗口显示不同的自定义视图.到目前为止,我能够使用我学到的关于MVVM的一切:)
现在我遇到了一个新的"问题":在更大的视图中我有10个相同视图的实体.这十个视图实体包含一组控件(文本框,组合框等),但都是一致的.
那么如何将这些视图绑定到ViewModel?
我想过在"更高级别"的ViewModel中有10个ViewModel实例,并将视图修复定义为VM的实例作为datacontext.
我现在的问题是 - >是否有更简单(或更方便)的方法将许多(相同的)视图绑定到其视图模型?
代码示例:
查看型号:
private PanelViewModel _panelViewModel1 = new PanelViewModel();
public PanelViewModel PanelVM1
{
get { return _panelViewModel1; }
}
Run Code Online (Sandbox Code Playgroud)
视图 - 例如:
<myControls:vwPanel HorizontalAlignment="Left" x:Name="vwPanel1"
VerticalAlignment="Top" DataContext="{Binding Path=PanelVM1}"/>
Run Code Online (Sandbox Code Playgroud)
让我感到困扰的是,十次观看我需要十倍的逻辑吗?
更新:
回答一些问题:我想要显示一个视图10次(在我的示例中)我通过继承UserControl来定义自己的视图.所以我vwPanel继承自UserControl.10个vwPanel只放在Grid内的StackPanel中.
这不是关于显示数据,正如您所指出的那样,列表视图或数据网格是一个更好的起点.这是一个特殊情况,我需要这么多输入控件:/
UPDATE2:我希望更像是定义ViewModel列表并将我的10个视图绑定到此列表中的一个.但这不会起作用吗?至少我不知道如何在XAML列表中引用一个"特殊"权利......
我想知道,如果可能的话,在Visual Studio 2010中进行某种自动代码清理.
特别有趣的是:
在特殊情况下,例如保存文件.
我没有在选项中找到任何东西,但也许我只是有点盲目......在日食中afaik至少有可能打算保存.在Visual Studio中应该有类似的东西吗?
更新:感谢快速回复,问题是我是键盘快捷方式的产品(但仍然感谢提及),但我现在正在研究大量的外国代码,并且不必手动执行它对于每个文件:)