我有一个带有"StackPanel行"的DockPanel.
我需要每个StackPanel行获得相同的样式,但是,FIRST StackPanel行应该获得一种添加样式.
在CSS中,我会使用我在XAML样式中似乎没有的级联功能.是否有可能再有多个样式如下图所示的伪代码?如何在XAML样式中解决这个常见问题?
<Window x:Class="TestBinding99382.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestBinding99382"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<ObjectDataProvider x:Key="DataSourceCustomer" ObjectType="{x:Type local:Customer}" MethodName="GetCustomer"/>
<Style x:Key="DataRowStyleFirst" TargetType="StackPanel">
<Setter Property="Margin" Value="0 20 0 0"/>
</Style>
<Style x:Key="DataRowStyle" TargetType="StackPanel">
<Setter Property="Orientation" Value="Horizontal"/>
<Setter Property="VerticalAlignment" Value="Top"/>
<Setter Property="Margin" Value="0 0 0 0"/>
<Setter Property="DataContext" Value="{StaticResource DataSourceCustomer}"/>
<Setter Property="DockPanel.Dock" Value="Top"/>
</Style>
</Window.Resources>
<DockPanel>
<!-- PSEUDO CODE -->
<StackPanel Style="{StaticResource DataRowStyle,DataRowStyleFirst}">
<TextBlock Text="First Name:"/>
<TextBox Text="{Binding Path=FirstName}" Width="200" Margin="3 0 0 0"/>
</StackPanel>
<StackPanel Style="{StaticResource DataRowStyle}">
<TextBlock Text="Last Name:"/> …Run Code Online (Sandbox Code Playgroud) 我刚刚在Bart de Smet的在线博客上花了一些时间,发现它不仅对开发人员有用,而且有趣,有趣,阅读.作者显然不仅知道他的主题,而且有使他的写作愉快阅读的才能:
......在我身后80厘米的地方是死树格式的答案.我伸手去拿书架.一本蓝色的书,根据背面的贴纸在根特购买于08/03/03,从大约两年前的海外交通工具中取出.虽然没有尘土飞扬.标题仍然清晰可读:Windows Server 2003 TCP/IP协议和服务.是的,我承认.我甚至在Windows Server 2003中拥有关于IIS 6.0,Exchange 2003,Active Directory服务和PKI的书籍......
无论如何我还在寻找什么?哦,是的,处于CLOSEWAIT状态的大量连接.幸运的是,Book Browser服务声明了对Indexer服务的依赖.建议在死树卷的较高范围内加载页面,触发LCID 1033的搜索算法,并使用偏移量329响应"CLOSEWAIT"查询...
这类写作的另一个很好的例子是经典的菲利普和亚历克斯的网络出版指南,它是关于如何建立一个网络服务器的 90年代书,但有一个非常主观和信息丰富的写作风格,让你像学习小说一样阅读它将数据库连接到HTTP/HTML的不同策略.这本书也充满了他在世界各地旅行时拍摄的随机彩色照片,这使它成为独一无二的.
我想找到更多关于这种类型的写作:例如,写作需要WPF和ASP.NET MVC,并使其多汁有趣,并将其连接到更广泛的知识/经验,写作教你MVVM,但也涉及哲学和绘制面向对象模式与希腊思想之间的相似之处,或亚里士多德在层次结构中组织世界的动力等.
谁是那些超越仅仅传播信息的最佳开发者/作者,那些将他们的IT知识和他们的写作才能结合起来的作者能够创作出对技术水平的开发人员有用的愉快文献?
我正在从PHP迁移到C#.
在PHP中,使用抽象类来创建" 级联覆盖 "模式是简单而直接的,基本上" 基类方法将处理它,除非继承类具有具有相同签名的方法 ".
然而,在C#中,我花了大约20分钟在基础和继承类中尝试关键字new,virtual,abstract和override的各种组合,直到我最终得到了正确的组合来执行这种简单的级联覆盖模式.
因此,即使下面的代码按照我想要的方式工作,这些添加的关键字也向我建议C#可以用抽象类做更多的事情.我已经查找了这些关键字的示例,并基本了解它们的作用,但仍然无法想象除了这种简单的"级联覆盖"模式之外我会使用它们的真实场景.什么是一些现实世界中,你实现你的一天到一天的节目这些关键字的方法呢?
有效的代码:
using System;
namespace TestOverride23433
{
public class Program
{
static void Main(string[] args)
{
string[] dataTypeIdCodes = { "line", "wn" };
for (int index = 0; index < dataTypeIdCodes.Length; index++)
{
DataType dataType = DataType.Create(dataTypeIdCodes[index]);
Console.WriteLine(dataType.GetBuildItemBlock());
}
Console.ReadLine();
}
}
public abstract class DataType
{
public static DataType Create(string dataTypeIdCode)
{
switch (dataTypeIdCode)
{
case "line": …Run Code Online (Sandbox Code Playgroud) 我有一个最小值为0且最大值为1的滑块.
当我当前滑动它时,该值设置为0到1之间的十进制值,例如0.2342343.
但是,我希望该值只能是0或1(这样我的ViewModel属性只会在0或1时注册更改,而不是多次,因为用户将其从0拖动到1).
如何使滑块值仅为0或1?我尝试过SmallChange,LargeChange和SnapsToDevicePixels,但这些都不起作用.
<Slider Name="TheLanguageIndexSlider"
DockPanel.Dock="Bottom"
Minimum="0"
Maximum="1"
LargeChange="1"
SmallChange="1"
SnapsToDevicePixels="True"
Width="100"
Margin="5"
Value="{Binding LanguageIndex}"
HorizontalAlignment="Left"/>
Run Code Online (Sandbox Code Playgroud) 在StackOverflow问题上如何在MVVM模式中使用WPF转换器?我已经知道值转换器不应该在MVVM模式中使用,因为值转换器的功能应该由ViewModel本身处理.
这是有道理的.
但我记得读过你不应该将XAML元素暴露给View,而是只暴露View然后使用DataTemplates绑定和显示的数据集合.
但是,转换器似乎非常强大(例如,它们在MVVM模板演示中使用,在解压缩后看到"Messenger示例"),因为它们可以将对象转换为对象,例如将Message对象转换为FlowDocument对象,或将Customer对象转换为Visibility对象或自定义状态对象到图像等
因此,如果ViewModel将采用Value Converter的功能,它将不得不公开XAML元素和属性,如StackPanel,Visibility,Color,FlowDocument等,对吧?
有谁看到任何理由为什么ViewModel不应该像值转换器那样公开这些丰富的XAML对象?
在我的应用程序中,我使用StringBuilder使用此代码构建XML文件:
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>" + Environment.NewLine);
sb.Append(String.Format("<{0}>{1}", _pluralCamelNotation, Environment.NewLine));
for (int index = 0; index < 3; index++)
{
sb.Append(String.Format("\t<{0}>{1}", _singularCamelNotation, Environment.NewLine));
foreach (DataType dataType in _allDataTypes)
{
sb.Append(String.Format("\t\t<{0}>{2}</{0}>{1}", dataType.CamelCaseNotation, Environment.NewLine, dataType.GetDummyData()));
}
sb.Append(String.Format("\t</{0}>{1}", _singularCamelNotation, Environment.NewLine));
}
sb.Append(String.Format("</{0}>{1}", _pluralCamelNotation, Environment.NewLine));
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
如何使用LINQ执行相同的操作,如下所示:
PSEUDO-CODE:
var xdoc = new XDocument(
new XDeclaration("1.0", "utf-8", null),
for (int index = 0; index < 3; index++) {
new XElement(_pluralCamelNotation,
_allDataTypes.Select(datatype => new XElement(_singularCamelNotation,
new XElement(datatype.CamelCaseNotation, …Run Code Online (Sandbox Code Playgroud) 在这个stackoverflow问题中,我了解到Prism/Unity并没有像我想象的那样解耦,例如,如果我有这个类将menuManager注入到它的构造函数中,那么我必须确保这个类实际存在于某个地方(我认为你可以只需拉出包含类的.dll,容器就会处理它,例如在其位置注入null):
public class EmployeesPresenter
{
public EmployeesPresenter(IMenuManager menuManager)
{
}
}
Run Code Online (Sandbox Code Playgroud)
但是我可以解决这个问题:应用程序无法在没有MenuModule的情况下运行(或者根据建议我可以使用NullMenuModule,它只会阻止应用程序中断).
但是,我正在构建的应用程序将在MenuModule中有一个MenuManager类,并且每个模块都必须使用MenuManager在菜单中注册它想要的所有内容.但是,我希望能够换出MenuModule,例如有一个InfragisticsMenuModule,并有一个TelerikMenuModule等.
但是,当我在例如CustomersModule中时,为了使用TelerikMenuModule,我需要引用它.当我想使用InfragisticsMenuModule时,我需要引用它.
那么我如何能够与InfragisticsMenuModule"热交换"TelerikMenuModule而无需使用新引用重新编译所有模块,例如我想要替换它:
Application.exe
Customers.dll
TelerikMenuModule.dll
Run Code Online (Sandbox Code Playgroud)
有了这个:
Application.exe
Customers.dll
InfragisticsMenuModule.dll
Run Code Online (Sandbox Code Playgroud)
并且只需能够重新启动应用程序并使用新的InfragisticsMenuModule.dll运行,并且不会抱怨TelerikMenuModule.dll不再存在.
我正在为教师(非程序员)创建一个社交网站,教师可以在其上添加活动,链接,练习,提示,课程计划,书籍等.
我希望它们中的每一项都能够像在StackOverflow中一样添加标签.
但是,因为他们是非编程用户,我认为空格分隔的非空间标签和camelCase标签会导致太多的混淆,例如:
grammar teachingtips universityOfMinnesota phrasalverbs
Run Code Online (Sandbox Code Playgroud)
确实在这个类似的stackoverflow问题上,大多数答案建议使用这样的逗号:
grammar, teaching tips, university of minnesota, phrasal verbs
Run Code Online (Sandbox Code Playgroud)
但后来我刚刚注册了一个Delicious.com帐户(我不认为有一个非常以程序员为中心的观众)并看到他们也使用空格:
separate tags with spaces: e.g. hotels bargains newyork (not new york)
Run Code Online (Sandbox Code Playgroud)
就标签的当前用户体验趋势而言,您在此方面的经验是什么?现在,普通的互联网用户是否被认为是以空格分隔的标签?我不得不承认,我从未在我使用的任何主要网站上看过以逗号分隔的标签.你有没有找到一个很好的方法来组合它们,所以它甚至不重要,例如:
grammar book reviews teaching tips
Run Code Online (Sandbox Code Playgroud)
例如,有一个快速算法,用于检查当前标签的数量:
grammar
grammar book
grammar book reviews
book
book reviews
book reviews teaching
...
Run Code Online (Sandbox Code Playgroud) 当我在ItemsControl中的项目上有背景颜色,并将边距设置为0时,WPF会在项目之间留下细线,好像ItemsControl包装管道占用了一小部分空间.我用Snoop检查了可视化树,所有边距都设置为0,0,0,0.
导致这些线路的原因是什么,我该如何避免它们?
alt text http://i32.tinypic.com/9tzh1d.png
XAML:
<DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Background="Yellow" >
<ItemsControl ItemsSource="{Binding CustomerList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Background="DarkGreen">
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel Margin="10"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</StackPanel>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
using System.Windows;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace TestItemsControl2938
{
public partial class Window1 : Window, INotifyPropertyChanged
{
private ObservableCollection<Customer> _customerList = new ObservableCollection<Customer>();
public ObservableCollection<Customer> CustomerList
{
get
{
return _customerList;
}
set
{
_customerList = value;
OnPropertyChanged("CustomerList");
}
}
public …Run Code Online (Sandbox Code Playgroud) 在WPF应用程序中,我有弹出窗口实例的按钮.
alt text http://i28.tinypic.com/jqjkfp.jpg
这是XAML:
<Window x:Class="TestPopupFix.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="600" Width="800">
<StackPanel>
<Button Content="Open first popup" Click="Button_OpenFirst"/>
<Button Content="Open second popup" Click="Button_OpenSecond"/>
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
而这背后的代码:
private void Button_OpenFirst(object sender, RoutedEventArgs e)
{
Window window = new Window();
TextBlock tb = new TextBlock();
tb.Text = "This is the first window.";
window.Content = tb;
window.Width = 300;
window.Height = 300;
window.Show();
}
private …Run Code Online (Sandbox Code Playgroud) wpf ×7
xaml ×5
c# ×3
asp.net-mvc ×1
blogs ×1
containers ×1
itemscontrol ×1
linq ×1
mvvm ×1
popup ×1
prism ×1
silverlight ×1
slider ×1
styles ×1
writing ×1