Действительно ли возможно изменить цвет фона отключенной кнопки в WPF?

Я использовал метод, указанный @GhostCat, но он заставил меня полностью изменить код. Это мой новый код

public static Object[] Divisi(int[] array, int target){
    ArrayList<Integer> answer = new ArrayList<>();

    for (int i = 0; i<array.length; i++){
        if (array[i] % target == 0){
            answer.add(array[i]);
        }
    }

    return answer.toArray();
}

Это дало мне желаемый ответ, но как еще я могу сделать это без преобразования в объект

5
задан Edward Tanguay 8 May 2009 в 15:41
поделиться

4 ответа

Я бы попытался применить эффект затемнения с прямоугольником, заполняющим всю сетку, серым, с непрозрачностью меньше 1 и z-index выше, чем у обычных элементов управления. По умолчанию прямоугольник имел бы видимость = свернутый, тогда я бы использовал триггер, чтобы установить его видимость как видимую, когда какое-либо подходящее свойство «IsEnabled» переходит в «истину».

0
ответ дан 15 December 2019 в 06:34
поделиться

Вы можете просто удалить onclick, изменить цвет и сделать это состояние «отключено».

2
ответ дан 15 December 2019 в 06:34
поделиться

Вы можете создать для него свой собственный шаблон управления.

Я бы посоветовал использовать Blend (вы можете получить пробную версию, если у вас нет лицензии), чтобы создать копию шаблон, который вы сейчас используете.

Если вы исследуете текущий шаблон, он должен где-то устанавливать цвет фона для отключения. Ищите триггер на основе свойства IsEnabled.

1
ответ дан 15 December 2019 в 06:34
поделиться

Загляните в VisualBrush. Вы можете установить визуальный элемент VisualBrush для элемента управления, и VisualBrush воссоздает визуальное представление элемента управления без каких-либо фактических функций.

Я взял этот пример из книги Sells / Griffiths «Programming WPF» (глава 13 о графике) и немного изменил его, а затем еще немного, чтобы продемонстрировать вам решение.

При этом создается простой интерфейс рисования (вводятся координаты x и y двух точек, чтобы провести линию между ними), но также отражается изображение ниже. Он вовсе не должен быть надежным, но он должен продемонстрировать функциональность, которую, я думаю, вы ищете.
Последние 2 элемента прямоугольника с VisualBrush и SolidColorBrush - это то, как я создаю дублированный элемент управления, а затем затеняю его.

Что вы можете сделать, так это наложить эти 2 элемента на страницу / окно и т. Д., Которые вы хотите затенить, а затем сделать их видимыми, когда вы хотите, чтобы эффект имел место.

Надеюсь, это поможет.

<Window x:Class="GraphicsTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.Resources>
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="2*"/>
        <RowDefinition Height="1*"></RowDefinition>
    </Grid.RowDefinitions>
    <Grid x:Name="mainUI">
        <DockPanel>
            <GroupBox Header="Point 1" Name="gbPoint1" DockPanel.Dock="Top">
                <StackPanel Orientation="Horizontal">
                    <Label Width="40" HorizontalContentAlignment="Right">X:</Label>
                    <TextBox Name="tbX1" Width="40" TextChanged="Content_TextChanged"/>
                    <Label Width="40" HorizontalContentAlignment="Right">Y:</Label>
                    <TextBox Name="tbY1" Width="40" TextChanged="Content_TextChanged"/>
                </StackPanel>
            </GroupBox>
            <GroupBox Header="Point 2" Name="gbPoint2"  DockPanel.Dock="Top">
                <StackPanel Orientation="Horizontal">
                    <Label Width="40" HorizontalContentAlignment="Right">X:</Label>
                    <TextBox Name="tbX2" Width="40" TextChanged="Content_TextChanged"/>
                    <Label Width="40" HorizontalContentAlignment="Right">Y:</Label>
                    <TextBox Name="tbY2" Width="40" TextChanged="Content_TextChanged"/>
                </StackPanel>
            </GroupBox>
            <Canvas>
                <Line Name="lnDraw" Stroke="Black" StrokeThickness="2"/>
            </Canvas>
        </DockPanel>
    </Grid>
    <Rectangle Grid.Row="1">
        <Rectangle.LayoutTransform>
            <ScaleTransform ScaleY="-1"/>
        </Rectangle.LayoutTransform>
        <Rectangle.Fill>
            <VisualBrush Visual="{Binding ElementName=mainUI}" />
        </Rectangle.Fill>
    </Rectangle>
    <Rectangle Grid.Row="1">
        <Rectangle.Fill>
            <SolidColorBrush Color="Black" Opacity=".5"/>
        </Rectangle.Fill>
    </Rectangle>
</Grid>

И .cs

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void Content_TextChanged(object sender, TextChangedEventArgs e)
    {
        int x1;
        int x2;
        int y1;
        int y2;

        if (int.TryParse(tbX1.Text, out x1) && int.TryParse(tbX2.Text, out x2) && int.TryParse(tbY1.Text, out y1) && int.TryParse(tbY2.Text, out y2))
        {
            lnDraw.X1 = x1;
            lnDraw.X2 = x2;
            lnDraw.Y1 = y1;
            lnDraw.Y2 = y2;
        }
    }
}
0
ответ дан 15 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: