WPF的新功能并且具有选项卡,并且在每个选项卡中,内容以弯曲的角落面板/窗口/ whateveryouwannacallit呈现.我不确定如何做到这一点(Style,ControlTemplate)但决定采用DataTemplate方式.
所以现在我有了这个DataTemplate:
<DataTemplate x:Key="TabContentPresenter" >
<Border Margin="10"
BorderBrush="{StaticResource DarkColorBrush}"
CornerRadius="8"
BorderThickness="2"
Grid.Row="0"
Padding="5"
Background="{TemplateBinding Background}">
<ContentPresenter Content="{Binding}" />
</Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
正如你可以看到的背景属性,我不想在内容中设置背景颜色,但不知道如何.我在这里使用它.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="120"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ContentControl ContentTemplate="{StaticResource TabContentPresenter}" Background="White">
<!-- Something Here -->
</ContentControl>
<ContentControl ContentTemplate="{StaticResource TabContentPresenter}" Grid.Row="1" Background="Blue">
<!-- Something Here -->
</ContentControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
在这里使用DataTemplate是错误还是有其他方法吗?
我可以直接在内容上设置背景,并从模板中的填充更改为内容中的边距,但在一些类似的情况下无法工作,只需设置一次就更好了.
编辑:
根据建议,我改为ControlTemplate并将其置于样式中.这解决了背景问题,但创造了一个更大的问题.现在内容不会出现.我在博客上看到,放一个targetType解决了这个问题,但它并没有解决我的问题.代码现在看起来像这样,并且还改变了ContentControl以使用样式而不是模板.
<Style x:Key="TabContentPresenter" TargetType="ContentControl" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ContentControl">
<Border Margin="10"
BorderBrush="{StaticResource DarkColorBrush}"
CornerRadius="8"
BorderThickness="2"
Grid.Row="0"
Background="{TemplateBinding Background}">
<ContentPresenter Content="{Binding}" />
</Border>
</ControlTemplate>
</Setter.Value> …Run Code Online (Sandbox Code Playgroud) 所以我想要一个项目列表,当你选择它们时,它们会展开以显示更多信息(没有toggleButton).
我想有多种方法可以做到这一点,但我开始的是我有一个ListView绑定到viewModel集合,然后将ViewModel视图定义为Expander.这里的问题是绑定所选的一个进行扩展.
我开始就如何以不同的方式完成这项工作获得多个想法.也许修改ListView的ControlTemplate,将它的项目设置为我自己的扩展器类型.但是我不确定在为列表设置ItemsSource时效果如何.
问题是我不太确定这里最好的方法是什么.
用于MVC 3的当前验证方法似乎是ValidationAttributes.我有一个非常特定于该模型的类验证,并且具有一些属性之间的交互.
基本上,该模型具有其他模型的集合,并且它们以相同的形式进行编辑.我们称之为ModelA,它有一个ModelB的集合.我可能需要验证的一件事是,ModelB的某些属性的总和小于ModelA的属性.用户可以在一些选项中划分X个点数.
ValidationAttributes非常通用,我不确定它们是否适合这项工作.
我不知道MVC 3中是如何支持IDateErrorInfo的,以及它是否可以直接使用.
一种方法是通过方法验证,但这意味着我不能进行客户端验证.
做这样的事情的正确方法是什么?我还有其他选择吗?我低估了ValidationAttribute的强大功能吗?
作为Javascripts的初学者,我决定尝试Knockout开始非常简单并且更先进.然而,我甚至无法在一个非常简单的场景中让它工作.
我猜这个问题非常简单,我有点不好意思在这里问这个问题.但我不擅长调试Javascript,也不知道bug会如何表现,所以这里就是这样.
这是asp.net MVC 3生成后页面的html源代码:
<html>
<head>
<title>Index</title>
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
</head>
<body>
<h2>Index</h2>
<script src="/Scripts/knockout-1.3.0beta.debug.js" type="text/javascript"></script>
<script src="/Scripts/knockout-1.3.0beta.js" type="text/javascript"></script>
<script type="text/javascript">
var viewModel = {
name: "Joe",
number: "13"
};
</script>
<script type="text/javascript">
ko.applyBindings(viewModel);
</script>
<ul>
<li>Name: <input data-bind="text: name"/></li>
<li>Number: <input data-bind="text: number"/></li>
</ul>
<ul>
<li>Name: <span data-bind="text: name"></span></li>
<li>Number: <span data-bind="text: number"></span></li>
</ul>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Joe或13不受输入或文本框的约束.
尝试把它放在一个ko.observable()但也没有工作.就像脚本没有运行一样.
尝试使用FireBug进行调试,我可以看到执行了applyBinding,并且viewModel对象确实包含了正确的变量.
这可能是显而易见的事情.如果你在这里看不到它,那么你可以指出在使用FireBug时我应该寻找什么吗?
编辑
在尝试了几种解决方案的组合后,我仍然遇到问题.使用一个解决方案,HTML看起来像这样:
<html>
<head>
<title>Index</title>
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> …Run Code Online (Sandbox Code Playgroud) 所以我在System.Web.Helpers命名空间中尝试了Chart帮助器.
根据http://www.asp.net/web-pages/tutorials/data/7-displaying-data-in-a-chart
我在.cshtml视图中制作图表,但我想将其保留在ViewModel中.
没问题,除了我试图将其渲染为网站中的较小图像.
我认为最干净的解决方案是创建一个共享的局部视图来从模型中渲染图形
_graph.cshtml
@model System.Web.Helpers.Chart
@Model.Write()
Run Code Online (Sandbox Code Playgroud)
然后在适当的网站上以某种方式呈现此部分视图.我尝试了几个版本,但似乎无法让它工作.
Website.cshtml
<div>
<h2>Some header above a graph</h2>
<img src="@Html.Partial("_graph", Model.TheChart)" />
</div>
Run Code Online (Sandbox Code Playgroud)
这不起作用,我不确定如何做到这一点.只有我认为现在才能想到的是,所有带图表的模型都会继承一个公开Chart的接口,让它成为_graph.cshtml的模型.
<img src="_graph.cshtml" />
Run Code Online (Sandbox Code Playgroud)
但不确定这是否使用了模型.
任何意见?
当在当前用户测试的客户端应用程序中捕获未处理的异常时,我创建了这样的代码.
catch(Exception ex)
{
var result = MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK);
Current.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
但是消息框只会很快出现,然后程序关闭.为什么代码不等待结果显而易见.我该怎么办?
我想'定义一个网格中特定类型的每个控件都获得一个Style.只需将具有TargetType的样式放在网格资源中即可.但是,如果我不想将这个网格作为一种风格重用呢?
我可以创建一个网格样式并设置一个资源设置器,但只能在那里放一个样式.
<Style x:Key="GridStyle" TargetType="Grid">
<Setter Property="Resources">
<Setter.Value>
<Style TargetType="TextBlock" BasedOn="{StaticResource MainText}" />
<Style TargetType="{x:Type RowDefinition}">
<Setter Property="Height" Value="Auto"/>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource MainButton}" />
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
无法工作,因为setter只能放入一种风格.
这可能是非常简单的事情,但我没有得到它,我不想在每个网格中重复这些样式.
假设我有一个类,我们将它命名为Parent.这个类有一个属性作为另一个类的对象,我们称之为Child.Child具有int属性ID.
现在,这些类的实例基于数据库表中的行.
所以让我们说Parent有ID = 4的Child实例,在我的程序中会有一个包含所有可用Child实例的Dropdown列表,所以我们可以在Parent中更改实例.
问题是,由于设计不良,所有子对象的列表都是在父级内的Child的单独场合实例化的,所以即使它们都有ID = 4,它也不会将它们识别为同一个对象(因为它当然不是是的.
但是我仍然不是同一个ID对象是ComboBox的默认对象.我当然应该以某种方式引用ID,但在12月的黑暗月份我有点慢,我没有看到如何做到这一点,因为它仍然是我设置的对象不仅仅是int值.
这是XAML代码:
<DataTemplate x:Key="EditTemplate" DataType="{x:Type data:Parent}">
<ComboBox ItemsSource="{Binding ElementName=Panel, Path=DataContext.ChildList}"
SelectedItem="{Binding Path=Child, Mode=TwoWay}"
SelectedValuePath="ID" DisplayMemberPath="Name" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud) 我有一个抽象的泛型类.我想在那里定义一个方法,所以我不必在所有派生类中都这样做.
基本上我需要根据泛型类的类型来获取一个存储库类.
我通过另一个非泛型的类获取repoistories.
如何让该类根据泛型调用者具有的类型返回通用存储库?
我希望这样的事情.
public IRepository<T> Table<T>()
{
return _container.Resolve<IRepository<T>>();
}
Run Code Online (Sandbox Code Playgroud)
如果它是一个财产,它会更好.
我来自更多的WPF应用程序背景,我习惯于绑定等等.跳入网站然后可能会遇到问题,因为它们的工作方式更加不同.
我正在尝试做一个简单的Ajax动作,但不知道从哪里开始.基本上我想创建一个下拉列表来更改模型上的一个属性并重新呈现页面的那一部分.也许这是WPF方式太多了,所以我的模型可能会扭曲它应该做的事情.
这是我已经得到的:
public class TheViewModel
{
private IEnumerable<TheData> _data;
public TheViewModel(IEnumerable<TheData> data)
{
_data = data;
Year = 2012;
}
public int Year { get; set; }
public ICollection<TheData> Data
{
get
{
return _data.Where(d => d.Year == this.Year).ToList();
}
}
public IEnumerable<SelectListItem> YearList
{
// lists the available years
}
}
public class TheData
{
public int Year { get; set; }
//Some more info I want to represent in Table
}
Run Code Online (Sandbox Code Playgroud)
而剃须刀:
@using …Run Code Online (Sandbox Code Playgroud) wpf ×5
c# ×3
.net ×1
ajax ×1
asp.net-ajax ×1
binding ×1
charts ×1
combobox ×1
datatemplate ×1
expander ×1
firebug ×1
generics ×1
grid ×1
html ×1
javascript ×1
knockout.js ×1
listview ×1
messagebox ×1
methods ×1
mvvm ×1
properties ×1
razor ×1
resources ×1
setter ×1
styles ×1
templates ×1
validation ×1
xaml ×1