Конвертер / селектор стилей без привязки?

#c# #wpf #.net-4.0 #valueconverter

#c# #wpf #.net-4.0 #valueconverter

Вопрос:

Можно ли использовать конвертер / селектор стилей без необходимости использования привязки данных?

Я хочу, чтобы стиль моего объекта менялся при достижении определенного значения.

Вот что у меня есть

     <Border Name="watch0_0Border" Grid.Row="0" Grid.Column="0" Style="{StaticResource clockBorderStyle}">
        <StackPanel Style="{StaticResource clockStackPanelStyle}">
            <TextBlock Name="watch0_0Time" Style="{StaticResource clockTimerStyle}">07:45:23</TextBlock>
            <TextBlock Name="watch0_0Description" Style="{StaticResource clockTextStyle}" Text="{Binding ElementName=watch0_0WorkDescription, Path=Text}"></TextBlock>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Button Name="watch0_0Pause" Margin="5" Click="watch0_0Pause_Click">Pause</Button>
                <Button Name="watch0_0SetNewTime" Margin="5" Click="watch0_0SetNewTime_Click">Set new time</Button>
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <TextBox Name="watch0_0Hours" Margin="5">0</TextBox>
                <TextBox Name="watch0_0Minutes" Margin="5">0</TextBox>
                <TextBox Name="watch0_0Seconds" Margin="5">0</TextBox>
            </StackPanel>
            <TextBox Name="watch0_0WorkDescription" TextAlignment="Center" Margin="5">Work description</TextBox>
        </StackPanel>
    </Border>
 

Я хочу изменить фон границы, когда время будет меньше 0.

Комментарии:

1. Это зависит от того, как изменяется значение (например, это автоматически обновляемое значение или оно изменяется пользователем). Как насчет использования триггера / datatrigger / eventtrigger?

2. Почему вам не нравится привязка? Вы можете использовать его с пользовательским значением (не связанным с DataContext)

3. Я обычно также использую привязку, но это только для быстрого проекта. Я хочу изменить фон, когда таймер опустится ниже нуля.

4. @FireFly3000: предоставьте некоторый XAML, который вы уже создали, и свойства ViewModel, которые вы хотите обработать

5. Я не вижу никаких привязок к чему-то вроде TimerValuie, также попробуйте команды вместо обработчиков событий… таким образом, вы можете отделить логику от представления моей логики перемещения из кода в нечто вроде ViewModel в MVVM o

Ответ №1:

Если ваш таймер имеет доступ к главному окну (которое может получить доступ к watch0_0Border) или watch0_0Border напрямую (передавая их при создании timer), то вы должны просто иметь возможность использовать диспетчер пользовательского интерфейса для установки watch0_0Border.BorderBrush (или любого другого свойства), когда таймер достигает нуля.

Комментарии:

1. Именно то, что я искал… Я не знаю, почему я не подумал об этом сам: S