2014-03-12 108 views
1

我有一个TextBox,它向用户显示一个文件路径。用户可以使用OpenFileDialog来选择文件,这会更新文本,或者直接将文件写入/粘贴到文本框中。ValueConversion only only when not selected

但是,文本框的大小受到限制,为了避免路径被切断,我使用自定义IValueConverter来切断部分路径以确保驱动器号和文件名都可见。

例如, C:\Users\USERNAME\Documents\CompanyName\ExportType\ExportName\Exportfile1.bin
变得
C:\...\ExportType\ExportName\Exportfile1.bin

然后,当用户选择的字段,会出现问题。正如预期的那样,IValueConverter的ConvertBack方法被触发,现在的值是缩短的路径。

是否可以在不创建一些自定义复杂的自定义控件的情况下在未选中时显示一个格式化值,并在选择时显示原始值?

(我有机会获得Telerik的UI组件,如果它已经存在这样的组件)

+0

也许触发引发事件PreviousMouseDown更改属性使用并发提及的转换器和触发事件PreviousMouseUp为了恢复到以前的值的文本。请记住,对于文本框事件MouseDown/Up不会引发。 – Maximus

+0

PreviewMouseDown(我猜你在那里有一个错字?)不是一个解决方案。用户可以选中它。 – AkselK

+0

将Focusable设置为false以停用。但是我越来越困惑你想达到什么。 – Maximus

回答

1

我想出了解决方案,而后面的代码

 <TextBox> 
     <TextBox.Style> 
      <Style TargetType="TextBox"> 
       <Setter Property="Text"> 
        <Setter.Value> 
         <Binding Path="nazwa" Converter="{StaticResource converter}" ConverterParameter="false"/> 
        </Setter.Value> 
       </Setter> 
       <Setter Property="Foreground" Value="Red"/> 
       <Style.Triggers> 
        <Trigger Property="IsFocused" Value="True"> 
         <Setter Property="Foreground" Value="Gold"/> 
         <Setter Property="Text"> 
          <Setter.Value> 
           <Binding Path="nazwa" Converter="{StaticResource converter}" ConverterParameter="true"/> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 

转换

public class conv : IValueConverter 
{ 
    private string track = null; 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
      track = value.ToString(); 
     return parameter.ToString().Equals("true") ? track: track.Substring(0,2); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

结果当文本框未被选中时 enter image description here

当我选择 enter image description here 只是改变颜色,还有。诀窍是改变发送到转换器的参数。让我知道它是否有效。

+0

啊,所以你不要使用静态绑定,聪明。我通过在IsFocused触发器中不包含转换器来改进了这一点。很棒! – AkselK