Попробуйте использовать Попробуйте использовать [111] для перенаправления на последний посещенный URL: Попробуйте использовать Попробуйте использовать [111] для перенаправления на последний посещенный URL: Попробуйте использовать Попробуйте использовать [111] для перенаправления на последний посещенный URL:
для перенаправления на последний посещенный URL:
SERVER['HTTP_REFERER']if(!empty(
для перенаправления на последний посещенный URL:
для перенаправления на последний посещенный URL:
Вы, как предполагается, используете другое управление в качестве источника, не параметра. Параметр должен быть константой, и в Вашем случае может быть-5.
Я не около VS в данный момент так синтаксис, возможно, неточный, однако, это - что-то как:
Width="{Binding ElementName=LayoutRoot, Path=ActualWidth,
Converter={StaticResource PositionConverter}, ConverterParameter=-5}"
(Преобразователь получит-5 как строка и должен будет преобразовать ее в число перед использованием ее.)
На основе моего опыта лучше использовать обратный вызов OnXXXChanged DependecyProperty XXX, и не связывать средства управления в том же окне/корне управляют тем другому. Одна из причин этого - то, что можно хотеть связать их с внешним элементом позже.
Или альтернативно, используйте мультипривязку:
<TextBlock>
<TextBlock.Width>
<MultiBinding Converter="{StaticResource yourConverter}">
<MultiBinding.Bindings>
<Binding /> <!-- Bind to parameter 1 here -->
<Binding /> <!-- Bind to parameter 2 here -->
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Width>
</TextBlock>
и и преобразователь, который преобразовывает эти два параметра в значение, которое Вы хотите.
Хотя я подозреваю, что может быть лучший способ решить Вашу проблему, я думаю, что у меня есть ответ для того, что Вы хотите сделать. (Вы не упоминали то, что вводит Ваш контейнер. StackPanel, например, заботится о расчете ширины для Вас. См. TextBox#2 ниже),
Сначала XAML
<Window x:Class="WpfApplication1.Window2" ...
xmlns:local="clr-namespace:WpfApplication1"
Title="Window2" Height="300" Width="300">
<Window.Resources>
<local:WidthSansMarginConverter x:Key="widthConverter" />
</Window.Resources>
<Grid>
<StackPanel x:Name="stack">
<TextBlock x:Name="txtStatusMessages"
Width="{Binding ElementName=stack,Path=ActualWidth,
Converter={StaticResource widthConverter}}"
TextWrapping="WrapWithOverflow"
Background="Aquamarine"
Margin="5,5,5,5">
This is a message
</TextBlock>
<TextBlock x:Name="txtWhatsWrongWithThis"
TextWrapping="WrapWithOverflow"
Background="Aquamarine"
Margin="5,5,5,5">
This is another message
</TextBlock>
</StackPanel>
</Grid>
</Window>
Затем Преобразователь. У нас есть проблема здесь.. так как ConverterParameter для методов Преобразования не может быть динамическим значением по некоторым причинам. Таким образом, мы крадемся в Поле Текстового поля через общественную собственность Преобразователя, который мы устанавливаем в ctor Окна. WidthSansMarginConverter.cs
public class WidthSansMarginConverter : IValueConverter
{
private Thickness m_Margin = new Thickness(0.0);
public Thickness Margin
{
get { return m_Margin; }
set { m_Margin = value; }
}
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (targetType != typeof(double)) { return null; }
double dParentWidth = Double.Parse(value.ToString());
double dAdjustedWidth = dParentWidth-m_Margin.Left-m_Margin.Right;
return (dAdjustedWidth < 0 ? 0 : dAdjustedWidth);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Window2.xaml.cs
public Window2()
{
InitializeComponent();
WidthSansMarginConverter obConverter = this.FindResource("widthConverter") as WidthSansMarginConverter;
obConverter.Margin = txtStatusMessages.Margin;
}
HTH. Спасибо за осуществление :)
Если Ваше текстовое поле является прямым ребенком LayoutRoot, просто установите следующее свойство в своем текстовом поле
HorizontalAlignment="Stretch"
да ... у меня работает несколько привязок ... на самом деле я пытался отправить элемент как параметр convereter, но он не принимал. вот почему я передал элемент в качестве значения классу преобразователя.
ниже мой пример ..
<ListView ... >
<ListView.View>
<GridView>
<GridViewColumn Header="xyz" >
<GridViewColumn.Width>
<MultiBinding Converter="{StaticResource GetWidthfromParentControl}">
<MultiBinding.Bindings>
<Binding ElementName="lstNetwork" Path="ActualWidth"/>
<Binding ElementName="MyGridView"/>
</MultiBinding.Bindings>
</MultiBinding>
</GridViewColumn.Width>
....
</GridViewColumn>
<GridViewColumn ...>
....
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
При изменении размера окна нужно изменить размер моего первого столбца gridview, а не двух других столбцов gridview .. Я передал фактическую ширину списка, а также общий объект gridview как элемент. если вы перейдете в код конвертера ...
class GetWidthfromParentControl : IMultiValueConverter
{
#region IMultiValueConverter Members
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
GridView view = values[1] as GridView;
GridViewColumnCollection collc = view.Columns;
double actualWidths = collc[1].ActualWidth + collc[2].ActualWidth;
return ((double)values[0] - actualWidths );
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
#endregion
}
у меня это сработало ... :)