If the condition is in XAML

it is possible to implement the if condition via XAML for wpf, if so, please provide the skeleton for the condition for checking the .net version in the xaml version.

I use xaml for Visual Studio 2010 and 2008, I want to execute a special piece of code for vs2010 and hide the same for vs2008

+6
source share
3 answers

Yes, they are called Trigger s. There are different types, and they respond to changes in data values ​​that are associated with data, events that are fired, or even the state of user interface controls. You can find a good article describing them in the Triggers column in WPF in the code project.

EDIT β†’>

I just added your comment to your question, and I have to say that the inclusion of an important part of your question in the comment was not very good ... as such, most of the answers still do not answer your question the actual question. For this reason, I rejected your question.

In answer to your real question, no, I don’t think you can use conditional XAML, which can tell the difference between the versions of Visual Studio. If you told us that you set a goal, then we can still help.

+6
source

Take a look at using converter in your XAML. Using the converter, you can make decisions in your XAML by executing code. For example, this will make my button visible under certain conditions:

Xaml

 <Button x:Name="btnMyButton" Margin="2,0" Command="{Binding Model.MyButtonCommand}" Content="My Text" Visibility="{Binding Model.IsShowMode, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=False}" /> 

C # class

 public class BoolToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { // Do the conversion } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { // UnDo conversion } } 
+4
source

maybe you can take a look at this http://josheinstein.com/blog/2010/06/switchconverter-a-switch-statement-for-xaml/

I have not tried this, but it seems that it may suit you.

Edit:

Here is the SwitchConverter code since Josh's site is down -

 /// <summary> /// A converter that accepts <see cref="SwitchConverterCase"/>s and converts them to the /// Then property of the case. /// </summary> [ContentProperty("Cases")] public class SwitchConverter : IValueConverter { // Converter instances. List<SwitchConverterCase> _cases; #region Public Properties. /// <summary> /// Gets or sets an array of <see cref="SwitchConverterCase"/>s that this converter can use to produde values from. /// </summary> public List<SwitchConverterCase> Cases { get { return _cases; } set { _cases = value; } } #endregion #region Construction. /// <summary> /// Initializes a new instance of the <see cref="SwitchConverter"/> class. /// </summary> public SwitchConverter() { // Create the cases array. _cases = new List<SwitchConverterCase>(); } #endregion /// <summary> /// Converts a value. /// </summary> /// <param name="value">The value produced by the binding source.</param> /// <param name="targetType">The type of the binding target property.</param> /// <param name="parameter">The converter parameter to use.</param> /// <param name="culture">The culture to use in the converter.</param> /// <returns> /// A converted value. If the method returns null, the valid null value is used. /// </returns> public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { // This will be the results of the operation. object results = null; // I'm only willing to convert SwitchConverterCases in this converter and no nulls! if (value == null) throw new ArgumentNullException("value"); // I need to find out if the case that matches this value actually exists in this converters cases collection. if (_cases != null && _cases.Count > 0) for (int i = 0; i < _cases.Count; i++) { // Get a reference to this case. SwitchConverterCase targetCase = _cases[i]; // Check to see if the value is the cases When parameter. if (value == targetCase || value.ToString().ToUpper() == targetCase.When.ToString().ToUpper()) { // We've got what we want, the results can now be set to the Then property // of the case we're on. results = targetCase.Then; // All done, get out of the loop. break; } } // return the results. return results; } /// <summary> /// Converts a value. /// </summary> /// <param name="value">The value that is produced by the binding target.</param> /// <param name="targetType">The type to convert to.</param> /// <param name="parameter">The converter parameter to use.</param> /// <param name="culture">The culture to use in the converter.</param> /// <returns> /// A converted value. If the method returns null, the valid null value is used. /// </returns> public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } } /// <summary> /// Represents a case for a switch converter. /// </summary> [ContentProperty("Then")] public class SwitchConverterCase { // case instances. string _when; object _then; #region Public Properties. /// <summary> /// Gets or sets the condition of the case. /// </summary> public string When { get { return _when; } set { _when = value; } } /// <summary> /// Gets or sets the results of this case when run through a <see cref="SwitchConverter"/> /// </summary> public object Then { get { return _then; } set { _then = value; } } #endregion #region Construction. /// <summary> /// Switches the converter. /// </summary> public SwitchConverterCase() { } /// <summary> /// Initializes a new instance of the <see cref="SwitchConverterCase"/> class. /// </summary> /// <param name="when">The condition of the case.</param> /// <param name="then">The results of this case when run through a <see cref="SwitchConverter"/>.</param> public SwitchConverterCase(string when, object then) { // Hook up the instances. this._then = then; this._when = when; } #endregion /// <summary> /// Returns a <see cref="System.String"/> that represents this instance. /// </summary> /// <returns> /// A <see cref="System.String"/> that represents this instance. /// </returns> public override string ToString() { return string.Format("When={0}; Then={1}", When.ToString(), Then.ToString()); } } 
+1
source

Source: https://habr.com/ru/post/1497786/


All Articles