Tag: xaml

WPF ListView每行都有按钮

我有一个Games列表,它只有一个ID ,一个Date和一个Time 。 我将此列表设置为DataContext 。 然后,我为这些游戏准备了一个DataTemplate : //need to but a button here for each row 要使用模板,我只是这样做: 我需要在此列表视图中的每一行添加一个Button ,它具有相同的点击事件,但会以某种方式传递点击该按钮的游戏ID。 我怎样才能做到这一点? 我被卡住了。 如果它没有意义让我知道,我会尝试更好地解释。

如何实现BoolToVisibilityConverter

在我的应用程序中,我想切换StackPanel中项目的可见性。 我的Stackpanel包含一个Image和一个TextBlock。 我如何正确使用BoolToVisibilityConverter来切换TextBlock的可见性,并为用户的利益保存此设置? 目前我的情况如下,虽然我收到了一些错误。 重要提示,我需要使用ApplicationBar菜单项作为单击事件来驱动TextBox可见性的切换。 编辑 尽管TextBlock的可见性未发生变化,但不再出现错误。 XAML xmlns:common=”clr-namespace:TestApp.Common” 代码背后 private void BuildLocalizedApplicationBar() { ApplicationBar = new ApplicationBar(); ApplicationBarMenuItem showFilterNamesMenuItem = new ApplicationBarMenuItem(); if (Settings.ShowFilterNames.Value) showFilterNamesMenuItem.Text = AppResources.EditPage_EffectNames_Hide; else showFilterNamesMenuItem.Text = AppResources.EditPage_EffectNames_Show; showFilterNamesMenuItem.Click += showFilterNamesMenuItem_Click; ApplicationBar.MenuItems.Add(showFilterNamesMenuItem); } void showFilterNamesMenuItem_Click(object sender, EventArgs e) { if(Settings.ShowFilterNames.Value) { ((ApplicationBarMenuItem)ApplicationBar.MenuItems[0]).Text = AppResources.EditPage_EffectNames_Hide; Settings.ShowFilterNames.Value = false; //Toggle the text block […]

如何从XAML引用嵌入式资源?

我有几个图像,我想嵌入到exe中。 当我将构建操作设置为嵌入式资源时,我通过代码解决了资源不可用的错误,并要求我将构建操作设置为资源 我尝试了几种不同的方法: YearBook;component/Resources/Images/darkaurora.png Images/darkaurora.png pack://application:,,,/Resources/Images/darkaurora.png 此代码位于Resource文件中。 但没有一个工作,他们都抛出这个错误: Cannot convert the string ‘pack://application:,,,/Resources/Images/darkaurora.png’ into a ‘System.Windows.Media.ImageSource’ object. Cannot locate resource ‘resources/images/darkaurora.png’. Error at object ‘Image_Background’ in markup file ‘YearBook;component/Resources/ImageResources.xaml’ Line 4 Position 6. 在代码中的不同位置我得到: the file ‘YearBook;component/Resources/Images/shadowdrop.png’ is not a part of the project or its ‘Build Action’ property is not set to ‘Resource’ 那么,我做错了什么?

动态创建Minesweeper游戏的游戏板

为了学习C#,XAML,尤其是MVVM,我开始编写Minesweeper游戏。 我创建的第一个版本没有MVVM部分,我创建并添加了带有C#代码的按钮,而不是通过MVVM方式在XAML中进行。 现在我尝试将MVVM模式应用到游戏中。 我制作了一个自己的用户控件,其中包含一个代表雷区部分的按钮。 此控件还具有ViewModel和Model Class,用于存储某些状态数据并处理某些命令。 在一个测试项目中,我创建了4个自己的用户控件,并尝试将它们放在一个网格中,按钮形成一个2×2按钮的正方形。 在后面的代码中,按钮放在ObservableCollection对象中。 我假设在这个对象中列出的按钮和索引如下: Button1 Button2 Button3 Button4 但在演示网格中我希望按钮显示为 Button1 | Button2 ——–+——– Button3 | Button4 问题是:我该如何动态地做到这一点? 在我的测试项目中我使用4个按钮进行测试,但在项目中我想使用它,按钮的数量可能会有所不同,具体取决于玩家选择的游戏难度。 第二个问题是我如何弄清楚按钮的neigbhours是什么。 因此,如果网格是4乘5包含20个按钮。 例如,我选择按钮8,该按钮具有作为邻居按钮编号2,3,4,7,9,12,13和14.当列出按钮时,如何到达那些邻居按钮? 我希望我的问题足够清楚。 先感谢您!

为什么修改项目输出目录会导致:IOException未处理“无法找到资源’app.xaml’。”

为了将项目设置合并到C ++和C#项目的属性表中,构造了以下属性表: $(ProjectName) $(AssemblyName) x86 x86 x64 AnyCPU $(OutputRelativePath)/$(ProjectOrAssemblyName)_$(ShortPlatform)_$(Configuration)/ $(OutputRelativePath)/Obj_Exe/$(ProjectOrAssemblyName)_$(ShortPlatform) $(BaseIntermediateOutputPath)_$(Configuration)/ $(IntermediateOutputPath) $(OutputPath) 此属性表将所有构建输出移动到单独的位置OutputRelativePath (在单独的属性表中定义或直接在项目文件中定义)外部目录,其中包含源代码以便于清理等。但是,在设置完成后,构建工作正常并且所有unit testing工作正常,很明显WPF可执行项目不是很好,因为使用上面的属性表运行应用程序导致臭名昭着: IOException was unhandled “Cannot locate resource ‘app.xaml’.” 为什么更改输出路径会导致此错误? 如何确定原因是项目构建输出路径? 这可以在生成的代码中看到吗? 我找不到? 这不是一个错误吗? 注意:使用以下属性表有效,但仅当IntermediateOutputPath包含BaseIntermediateOutputPath时才有效 。 $(OutputRelativePath)/$(AssemblyName)_$(Platform)_$(Configuration) $(OutputRelativePath)/Obj_Exe/$(AssemblyName)_$(Platform) $(BaseIntermediateOutputPath)_$(Configuration) 所以看来,不知何故,输出路径包含AssemblyName属性或类似属性。 在另一个组件中更新XAML样式:如果这些 – 例如Brushes.xaml – 位于另一个程序集中并且此程序集也更改了OutputPath,则同样适用于xaml ResourceDictionary,这也会引发exception: XamlParseException was unhandled for set property Source with InnerException “Cannot locate resource ‘Brushes.xaml'” 总而言之,输出位置会改变xaml资源名称,因此无法以某种方式在运行时发现这些名称。 奇怪的是它在设计时不是问题…… […]

可视树外的数据绑定。 数据上下文桥接

我试图将动态行为绑定到WPF逻辑和可视树之外的可视元素。 我的问题是RadChart绘图颜色在(准路径)中给出:RadChart.SeriesMapping.LineSeriesDefinition.Appearance.Stroke 我原本想将它绑定到XAML中图表datacontext的属性。 天真的,我只是写了一个普通的{Binding PlotBrush} 编译器返回“无法找到Governing FrameWorkelement”错误。 在阅读之后,我认为这意味着在层次结构中解析datacontext不起作用。 因为它的祖先(XAML说话)具有除Fra​​meWorkElement之外的其他类型和其他关系,而不是内容控件的内容。 至少,这是我目前对它的理解。 请指正。 所以,我找到了“DataContext Bridge” http://www.codeproject.com/KB/WPF/AttachingVirtualBranches.aspx 简单来说,它表示您绑定了框架元素的datacontext属性,该元素在运行时将datacontext(不是任何inheritance它的那些)分配给资源中的FrameWorkElement实例的datacontext。 然后使用相同的资源对象实例绑定到您希望“附加”到DataContextinheritance动态的“分支”的datacontext属性。 但该文章的作者很幸运能够实现观察到的属性的validationrule消费者。 SolidColorBrush是密封的,我想即使使用装饰器也可以实现一个完整的画笔。 就我而言,这并没有帮助我做我想做的事,但我“非常接近”。 所以我想知道是否有某些方面的XAML技巧可以帮助我。 但是,目前还不清楚我是如何利用它的。 没有应该设置datacontext的对象。 AppearanceSettings不是FrameWorkElement。 Ok, how do I use the fact that I can access the datacontext here? 所以,下一步是我可以直接以某种方式获得画笔对象。 我尝试过这种事情,只是搞乱: .cs: public class ObservableBrush : FrameworkElement { public Brush Brush { get { return (Brush) GetValue(BrushProperty); […]

是否有一种简单/内置的方法来获取XAML元素的精确副本(克隆)?

我需要使XAML的区域可打印 ,因此制作此按钮处理程序: private void Button_Click_Print(object sender, RoutedEventArgs e) { Customer.PrintReport(PrintableArea); } 在PrintReport中,我将frameworkelement打包到其他元素中,以便以与屏幕上不同的方式打印它,如下所示: public void PrintReport(FrameworkElement fwe) { StackPanel sp = new StackPanel(); sp.Children.Add(fwe); TextBlock tb = new TextBlock(); tb.Text = “hello”; sp.Children.Add(tb); PrintDialog dialog = new PrintDialog(); if (dialog.ShowDialog() == true) { dialog.PrintVisual(sp, “Print job”); } } 但上面给出了以下错误 : 指定的元素已经是另一个元素的逻辑子元素。 首先断开它。 有没有一种简单的方法来克隆FrameworkElement,以便我可以操作副本,打印它,然后忘记它,让XAML中的原始元素显示在屏幕上完好无损? 我会想象这样的东西: FrameworkElement fwe2 […]

如何在ListView中获取单击的项目

这应该是一个微不足道的任务,但我找不到如何做到这一点。 我想听一下listview中的项目,获取相应的模型对象,然后启动一个新屏幕。 这是ListView的XAML: 而MyClick,MyTap: private void MyClick(object sender, ItemClickEventArgs e) { Debug.WriteLine(“Click!”); } private void MyTap(object sender, TappedRoutedEventArgs e) { Debug.WriteLine(“TAp!!” + sender.ToString() + “–” + e.ToString()); } 导航到新屏幕的方法: this.Frame.Navigate(typeof(SecondScreen)); 它工作,但我需要点击项目的模型对象,并将其作为参数传递给第二个屏幕。 但MyClick永远不会被调用,MyTap也不会向我提供有关所点击项目的任何信息。 “sender”是ListView。 我下载了这些exaples: http://code.msdn.microsoft.com/windowsapps/XAML-ListView-sample-pack-0ec6b60f 但它不包含我需要的东西,有一个主/细节视图,但它适用于绑定,我想要做的是启动一个完整的新屏幕。 注意:我是Windows开发中的菜鸟,并且采用通常的方式在Android或IOS中执行此操作,您可以使用单击元素的位置实现回调。 不知道在Windows 8中正确的方法。

过滤ObservableCollection?

当我将ListBox直接绑定到ObservableCollection时,我得到了我的ListBox中显示的实时更新,但是只要我在混合中添加其他LINQ方法,我的ListBox就不再被告知对ObservableCollection的任何更改。 在这里,让我举一个例子来说明; public partial class MainPage : PhoneApplicationPage { ObservableCollection Words = new ObservableCollection(); public MainPage() { InitializeComponent(); listBox1.ItemsSource = Words; } private void AddButton_Click(object sender, RoutedEventArgs e) { Words.Add(DateTime.Now.ToString()); } } 在这里,我向一个简单的页面添加了一个Button和一个ListBox,然后单击该按钮使新项目立即出现在ListBox中。 但是,如果我改变了 listBox1.ItemsSource = Words; 至 listBox1.ItemsSource = Words.Where(w => w.Contains(“:”)); ListBox不再更新。 如何在我的ObservableCollection和ListBox之间添加“filter”,并且仍然可以在不必再次设置.ItemsSource的情况下进行更新?

Sql,Wpf,Xaml,C#,绑定数据,动态资源,访问非静态数据,获取对象的引用

好吧,我对WPF和XAML非常陌生,尽管我的搜索我找不到一个简单的解决方案,但在我看来,我很快就找不到答案了。 问题很简单,我创建了一个WPF项目,并在SelectList.xaml中有一个数据网格。一旦选中一行,我将所选行保存在一个对象中,称这个对象称为“类别”。 到目前为止一切正常,但我无法弄清楚如何从其他地方temp.xaml获取对该对象的引用? 非常感谢任何帮助将非常感谢干杯