我有一个IValueConverter,它的工作是将BlockId转换为ConditionLabel.问题是我的Model对象具有进行实际转换的智能.到目前为止我的代码看起来像这样......
public class BlockIdToConditionLabelConverter : IValueConverter
{
private Model _model;
public BlockIdToConditionLabelConverter(Model model)
{
_model = model;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int blockId = (int)value;
return _model.BlockIdToConditionLabel(blockId);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Binding.DoNothing;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,我在这样的ResourceDictionary中创建一个静态资源(稍后在DataTemplate中引用它):
<local:BlockIdToConditionLabelConverter
x:Key="_blockIdToConditionLabelConverter" />
Run Code Online (Sandbox Code Playgroud)
问题是,我需要一种方法将我的Model对象传递给这个转换器.我该怎么办?
谢谢.
这是窗口声明:
<Window
x:Class="Pse.ExperimentBase.SplashWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Style="{StaticResource _windowStyle}"
WindowStartupLocation="CenterScreen"
WindowStyle="None">
Run Code Online (Sandbox Code Playgroud)
这是样式声明:
<Style
x:Key="_windowStyle"
TargetType="Window">
<Setter
Property="Width"
Value="{Binding Path=InitialWindowWidth}" />
<Setter
Property="Height"
Value="{Binding Path=InitialWindowHeight}" />
<Setter
Property="Icon"
Value="Resources/MyIcon.ico" />
<Setter
Property="Background"
Value="{StaticResource _fadedOrangeBrush}" />
<Setter
Property="FontSize"
Value="11" />
</Style>
Run Code Online (Sandbox Code Playgroud)
讨论:
屏幕为1280 X 1024.窗口大小(由InitialWindowWidth,InitialWindowHeight绑定确定)为800 X 600.
窗口打开时,它显示188,141(左,上).这基本上应该是"西北".如果我计算真正的居中值,它应该是240,212(左,上).
线索?
它始终是第一个出现问题的窗口.如果我打开同一窗口的第二个实例,它将显示在正确的位置.
另一个线索?
如果我在打开第一个实例之前创建两个实例,则第二个窗口实例将仅显示在正确的位置.
所以...
Window win1 = windowFactory.CreateSplashWindow();
win1.Show();
Window win2 = windowFactory.CreateSplashWindow();
win2.Show();
win1.Hide();
Run Code Online (Sandbox Code Playgroud)
...抵消win1和win2
但...
Window win1 = windowFactory.CreateSplashWindow();
Window win2 = windowFactory.CreateSplashWindow();
win1.Show();
win2.Show();
win1.Hide();
Run Code Online (Sandbox Code Playgroud)
...抵消win1,但显示win2死亡中心.
所以我的问题是:
这里发生了什么??? …
脚本
我有一个包含项目A,B和C的库.
我有两个解决方案.解决方案1包括项目A的副本,解决方案2包括项目A和项目B的副本.
当我构建解决方案1时,这是应该发生的事情:
替代文字http://img689.imageshack.us/img689/9341/onbuildsolution1.jpg
当我构建解决方案2时,这是应该发生的事情:
alt text http://img32.imageshack.us/img32/7821/onbuildsolution2.jpg
我怎样才能做到这一点?
这是我可以使用版本控制系统或现成的文件同步软件自动化的东西吗?或者我需要推出自己的解决方案吗?
如果我构建自己的解决方案,我会对它如何工作有一些想法,但我很感激您的任何输入:
可以是一个简单的控制台应用程序,带有用于指定"源解决方案"的命令行开关,例如:
c:\Program Files\Library Syncronizer\LibSync.exe /solution:Solution 1
Run Code Online (Sandbox Code Playgroud)用于注册包含库项目的活动解决方案的XML文件.可能的格式:
<solutions>
<solution>
<name>Solution1</name>
<path>c:\...\Projects\Solution 1</path>
</solution>
<solution>
<name>Solution2</name>
<path>c:\...\Projects\Solution 2</path>
</solution>
<!-- more solutions -->
</solutions>
Run Code Online (Sandbox Code Playgroud)计划将执行以下操作:
这在概念上听起来相对简单,但这可能会产生严重意想不到的后果,我没有想到.希望有人会警告我,如果它:)
更新 - 我复制项目文件夹的动机是什么?
总之 - 版本控制.
如果我将库项目保存在一个单独的文件夹中,并且只在我的各种解决方案中链接到它们(而不是在我的解决方案文件夹中物理定位文件夹),我的版本控制存储库最终不包含我的库项目的源代码.所以,如果我更新到"三个版本之前",并且我需要对我的一个库方法进行微小的更改,那么代码就不存在了.
我的解决方法是在我的库的存储库中添加标签,例如"解决方案1 - 版本2.5.3",但这非常笨重.如果我正在处理解决方案1的"三个版本之前"和解决方案2的当前版本,事情变得非常尴尬.现在,解决方案2将指向旧版本的库项目,这使得它可能无法实现使用和测试,直到我完成旧版本的解决方案1.
如果我正在使用副本,所有解决方案都会在其存储库中包含库源代码,并且我可以在需要时随时轻松地返回它.
我应该注意到,我一直在使用Tortoise HG(Mercurial)进行版本控制.
无论如何,我愿意解决这个问题.它不必涉及复制项目文件夹 - 这是我唯一能想到的,以确保我的所有版本控制存储库都是完整的独立软件包.
更新2
首先,只是一个注释.我使用Mercurial(TortoiseHG)进行版本控制,而不是SVN.如果绝对必要,我可以改变,但我真的更喜欢Mercurial.
根据目前为止的回复,我决定废除"双向复制"的想法,然后回到引用我的图书馆项目.这是一个新图:
alt text http://img30.imageshack.us/img30/7445/referencedprojects.jpg
然而,我仍然有相同的目标:
目标#1通过引用库项目而不是使用副本自动处理,目标#2只是我如何设置我的存储库的问题,但目标#3和#4仍然是难以捉摸的.
对于Mercurial,有一个子库存功能似乎可以处理我的情况,但正如文档所示,这仍然被认为是实验/风险.
目前,我认为一个好的解决方法可能是将库项目的 …
.net version-control mercurial projects-and-solutions visual-studio
问题
我有一个WPF工具包DataGrid,我希望能够在几个预设的列顺序之间切换.这是一个MVVM项目,因此列顺序存储在一个ViewModel.问题是,我无法获得为该DisplayIndex属性工作的绑定.无论我尝试什么,包括这个Josh Smith教程中的甜蜜方法,我得到:
带标题"ID"的DataGridColumn的DisplayIndex超出范围.DisplayIndex必须大于或等于0且小于Columns.Count.参数名称:displayIndex.实际值为-1.
这有什么解决方法吗?
我在下面提供了我的测试代码.如果您发现任何问题,请告诉我.
ViewModel代码
public class MainViewModel
{
public List<Plan> Plans { get; set; }
public int IdDisplayIndex { get; set; }
public int NameDisplayIndex { get; set; }
public int DescriptionDisplayIndex { get; set; }
public MainViewModel()
{
Initialize();
}
private void Initialize()
{
IdDisplayIndex = 1;
NameDisplayIndex = 2;
DescriptionDisplayIndex = 0;
Plans = new List<Plan>
{
new Plan { Id = 1, Name = "Primary", Description …Run Code Online (Sandbox Code Playgroud) 我在文档中搜索了一个HsbToRgb转换器,但没有发现任何包含"hsb"或"hsl"的内容,所以我猜它只是不存在.但是,确保是否有支持此转换的类?
更新
我最终选择了这个,这与0xA3略有不同.我还添加了一个,AhsbToArgb所以我可以转换为RGB并一次设置alpha通道.
AhsbToArgb - 允许alpha通道:
public static Color AhsbToArgb(byte a, double h, double s, double b)
{
var color = HsbToRgb(h, s, b);
return Color.FromArgb(a, color.R, color.G, color.B);
}
Run Code Online (Sandbox Code Playgroud)
HsbToRgb - 将色调饱和度 - 亮度转换为红 - 绿 - 蓝色:
public static Color HsbToRgb(double h, double s, double b)
{
if (s == 0)
return RawRgbToRgb(b, b, b);
else
{
var sector = h / 60;
var sectorNumber = (int)Math.Truncate(sector);
var sectorFraction = sector - sectorNumber;
var b1 = …Run Code Online (Sandbox Code Playgroud) 在我的web.config中,我有:
<system.web>
<customErrors mode="On" defaultRedirect="Error.cshtml" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
在Views/Shared/Error.cshtml中,我有:
@model System.Web.Mvc.HandleErrorInfo
@{
ViewBag.Title = "Error";
}
<h2>
Sorry, an error occurred while processing your request.
</h2>
Run Code Online (Sandbox Code Playgroud)
如果我将无效的URL /路由放入浏览器,我会得到:
'/'应用程序中的服务器错误.
无法找到该资源.
说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用.请查看以下网址,确保拼写正确.
请求的URL:/Error.cshtml
为什么找不到Error.cshtml?该文件肯定在Views/Shared中.
我只是看着这个答案,其中包含Nullable<T>.NET Reflector 的代码,我注意到两件事:
Nullable<T>去往时需要显式转换T.==运营商没有定义.鉴于这两个事实,令我惊讶的是,这编译:
int? value = 10;
Assert.IsTrue(value == 10);
Run Code Online (Sandbox Code Playgroud)
与代码value == 10,无论是value被神奇转化为int(因此允许int的==操作者使用,或==操作者被用于被奇迹般地定义Nullable<int>(或者,我假定的可能性较小,反射器是留出一些代码).
我希望必须做以下其中一项:
Assert.IsTrue((value.Equals(10)); // works because Equals *is* defined
Assert.IsTrue(value.Value == 10); // works because == is defined for int
Assert.IsTrue((int?)value == 10); // works because of the explicit conversion
Run Code Online (Sandbox Code Playgroud)
这些当然有效,但==也有效,而这是我没有得到的部分.
我之所以注意到这一点并且问我这个问题的原因是我正在尝试编写一个类似于它的结构Nullable<T>.我从上面链接的Reflector代码开始,并做了一些非常小的修改.不幸的是,我的CustomNullable<T>工作方式不同.我无法做到Assert.IsTrue(value == 10) …
我已经在FXML文件中的Label和相关控制器中的IntegerProperty之间建立了数据绑定.问题是,虽然标签在初始化时设置为正确的值,但是当属性的值更改时它不会更新.
FXML文件
<?xml version="1.0" encoding="UTF-8"?>
<?import java.net.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<GridPane xmlns:fx="http://javafx.com/fxml"
fx:controller="application.PaneController" minWidth="200">
<Label id="counterLabel" text="${controller.counter}" />
<Button translateX="50" text="Subtract 1"
onAction="#handleStartButtonAction" />
</GridPane>
Run Code Online (Sandbox Code Playgroud)
调节器
package application;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.beans.binding.Bindings;
import javafx.beans.property.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
public class PaneController implements Initializable
{
private IntegerProperty counter;
public int getCounter()
{
return counter.get();
}
public void setCounter(int value)
{
counter.set(value);
}
public PaneController()
{
counter = new SimpleIntegerProperty(15);
}
@Override
public …Run Code Online (Sandbox Code Playgroud) 只是好奇XAML编辑器在Visual Studio 2010中自动格式化和包装属性方面是否更好.
以下是编辑器在VS 2008中自动包装属性的方式:
<StackPanel Grid.Row="0" Grid.ColumnSpan="3">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontWeight="Bold"
Text="Current User:" />
<ComboBox x:Name="_usersComboBox" Margin="5,0,0,0" Width="200"
ItemsSource="{Binding Users}" SelectedValuePath="Name"
SelectedValue="System Administration">
<ComboBox.ItemTemplate>
<DataTemplate>
Run Code Online (Sandbox Code Playgroud)
以下是我希望编辑器自动换行属性的方法:
<StackPanel Grid.Row="0" Grid.ColumnSpan="3">
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontWeight="Bold"
Text="Current User:" />
<ComboBox x:Name="_usersComboBox" Margin="5,0,0,0" Width="200"
ItemsSource="{Binding Users}" SelectedValuePath="Name"
SelectedValue="System Administration">
<ComboBox.ItemTemplate>
<DataTemplate>
Run Code Online (Sandbox Code Playgroud)
VS 2010是否符合我的愿望?
我正在努力EmailSender,我正在从我的Web.config文件中获取电子邮件地址.如果可能的话,我还想从同一部分获取该电子邮件的"显示名称",但我没有看到明显的方法来执行此操作.
在我的Web.config文件中,我包含了一个默认的"来自电子邮件地址",如下所示:
<configuration>
<system.net>
<mailSettings>
<smtp from="myaddress@mydomain.com"><!-- no displayName attribute :( -->
<network ... />
</smtp>
</mailSettings>
</system.net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在我EmailSender,我有这样的事情:
var smtpSection = ...;
var message = new MailMessage();
message.From = new MailAddress(_settings.From, senderDisplayName);
Run Code Online (Sandbox Code Playgroud)
是否有推荐的方法存储senderDisplayName在web.config文件中?
有没有办法将其包含在from属性中?例如:
<smtp from="Automatic Mailer <myaddress@mydomain.com>">
Run Code Online (Sandbox Code Playgroud)appSettings?c# ×4
xaml ×4
wpf ×3
.net ×2
asp.net-mvc ×2
data-binding ×2
asp.net ×1
colors ×1
email ×1
fxml ×1
java ×1
javafx ×1
mercurial ×1
mvvm ×1
nullable ×1
operators ×1
web-config ×1
wpftoolkit ×1