我正在使用udev来检测我的Ubuntu 10.04 LTS x64服务器上的USB驱动器连接和断开连接.当机器运行时连接USB设备时,一切正常,但如果在启动时已经存在,我的脚本无法完成,显然是因为mkdir /tmp/blah不起作用.
如果我随后sudo udevadm trigger在终端打字,一切都还好.
我假设在udev首先根据其规则评估连接的设备时,根文件系统尚未安装.
因此,我的问题是:
/tmp/,在/安装之前和之后我可以使用它的替代品吗?我正在开发一个.NET 3.5赢形式的程序和我碰到与文本绘制一个"有趣"的问题.
我正在实现一个文本编辑控件,它使用DrawString()和StringFormat.GenericTypographic(以下称为GT)绘制文本.当用户键入时,行中较早的单词(或单词组)随机地左右移动.
它似乎可能是舍入误差 - 受影响的块看起来在水平平面中移动一个像素,因为字母被添加到线的末端.如果我使用StringFormat.GenericDefault(GD),则不会发生这种情况,但字符渲染的准确性会降低,这是不可接受的.
我推断我可以慢慢地将GD改为GT(每个设置都在MSDN中进行讨论,显然可以在调试器中进行检查)并查看哪些FormatFlags或其他设置导致了这一点并从那里开始.但是,如果我拿一份GD的副本,改变所有的属性,使它与GT相同,那么字符的位置是完全不同的 - 这两个所谓的相同对象的行为显然是不一样的.
像恕我直言的东西太多,.net Reflector表明StringFormat只是非托管对象的包装器,我只能假设并非所有这些属性都暴露给.net软件.
任何人都可以提出任何可能对我有用的建议吗 我知道TextRenderer可能会提供另一种渲染方法,但我在设计过程的早期就打了折扣(虽然我实际上不能记住现在的问题......).
编辑
我用于渲染的代码如下:
sForm = new StringFormat(StringFormat.GenericTypographic);
sForm.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
using (SolidBrush brush = new SolidBrush(frmt.ForegroundColour))
context.DrawString(line.Text, frmt.DisplayFont, brush, new PointF(horizontal, height), sForm);
Run Code Online (Sandbox Code Playgroud) DataGrid当用户单击最后一行以添加新行时,标准WPF中存在已知错误.
抛出异常是因为在处理MS.Internal.NamedObject表示'NewItemPlaceholder'的方法时,ConvertBack方法(在默认转换器上)失败.如果CanUserAddRows设置为True(并且集合支持它),则此实例用于表示空白的"新行".实际上,在尝试跟踪绑定失败时,似乎实际上在异常处理程序中抛出了FormatException.有关更多信息,请参阅Nigel Spencer的博客.
基本上解决方法是在SelectedItem绑定上添加转换器:
public class IgnoreNewItemPlaceholderConverter : IValueConverter
{
private const string newItemPlaceholderName = "{NewItemPlaceholder}";
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && value.ToString() == newItemPlaceholderName)
value = DependencyProperty.UnsetValue;
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML中使用它的一个例子是:
<Window.Resources>
<converters:IgnoreNewItemPlaceHolderConverter x:Key="ignoreNewItemPlaceHolderConverter"/>
</Window.Resources>
<toolkit:DataGrid ItemsSource="{Binding Persons}"
AutoGenerateColumns="False"
SelectedItem="{Binding SelectedPerson, Converter={StaticResource ignoreNewItemPlaceHolderConverter}}"
IsSynchronizedWithCurrentItem="True">...</toolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)
我的问题是我试图对我自己实施这个'修复'/'黑客' DataGrid …
我正在通过派生创建自定义控件ContentView。我的目标是让用户使用该类,就像您期望使用单个内容的任何控件一样:
<local:NewControl>
<Image source="..." />
</local:NewControl>
Run Code Online (Sandbox Code Playgroud)
但是,我希望控件包含一个网格,然后将内容放置在网格中。ContentPresenter从概念上讲(即忽略不能以这种方式使用的事实),我希望NewControl.xaml看起来像这样:
<ContentView ...>
<Grid x:Name="HiddenGrid">
<ContentPresenter />
</Grid>
</ContentView>
Run Code Online (Sandbox Code Playgroud)
执行我上面详细介绍的操作会导致HiddenGrid被 替换Image,而不是将图像作为 的子项插入可视化树中ContentPresenter。
目前,我正在通过派生Grid而不是 来实现我的目标ContentView,但我想隐藏此实现细节,以便消费者无法干扰Grid并拥有一个只能分配单个内容的控件。
这看起来应该很简单(并且广泛适用于需要以某种方式修饰内容的各种场景),但我看不出有什么方法可以做到这一点。我是否遗漏了一些明显的东西,这是不可能的,还是只是很难做到并且我需要阅读一些东西(例如控制模板)?